2013-04-29 35 views
9

Nếu tôi có điểm ngắt trong chương trình C# tôi rất thích sử dụng F # REPL để kiểm tra mã của tôi. Điều này có thể theo bất kỳ cách nào?Có cách nào trong Visual Studio 2012 để sử dụng F # REPL khi gỡ lỗi C#

+0

Kiểm tra cửa sổ ngay lập tức trong Visual Studio. Nó không phải là F # REPL, nhưng nó khá hữu ích. –

+0

Cửa sổ ngay lập tức trong C# hút khi bạn không thể sử dụng lambdas – bradgonesurfing

+0

Yea, tôi đồng ý rằng điều đó rất bực bội. Nhưng tôi vẫn thấy mình sử dụng nó một số tiền hợp lý. –

Trả lời

11

Bạn có thể gỡ lỗi dự án C# bằng F # REPL - Tôi thực hiện khi gỡ lỗi các dự án thư viện F #, nhưng các ứng dụng/thư viện C# cũng sẽ hoạt động (tôi nghĩ).

Biên dịch dự án C# của bạn. Trong tương tác F #, tham khảo hội đồng C# bằng cách sử dụng chỉ thị #r (xem bài đăng của ArthurFSharp). Chèn một điểm dừng ở đâu đó trong mã C# của bạn.

Trong Visual Studio, hãy truy cập Tools ->Attach to Process. Tìm Fsi.exe trong danh sách các quy trình và nhấp đúp vào nó; nếu bạn không nhìn thấy nó ở đó, hãy chắc chắn rằng quá trình Fsi đã được bắt đầu (chỉ cần nhấp vào bên trong cửa sổ tương tác F # nên làm điều đó).

Trong F # Tương tác, hãy thực hiện một số mã sẽ đạt đến điểm ngắt mà bạn đã đặt; trình gỡ lỗi nên dừng thực hiện trên điểm ngắt giống như bạn muốn. Miễn là trình gỡ lỗi không dừng lại trên một số điểm ngắt, bạn cũng có thể thực thi các mã khác từ bên trong FSI, ví dụ để thay đổi các thiết lập trong ứng dụng C# đang chạy.

QUAN TRỌNG: Hãy nhớ rằng Windows khóa lắp ráp bất cứ khi nào nó được tải vào quy trình. Điều này có nghĩa là bạn sẽ không thể biên dịch lại ứng dụng C# của bạn miễn là FSI đang mở! Tuy nhiên, khi bạn đã thực hiện một số thay đổi đối với ứng dụng C# và muốn biên dịch lại và bắt đầu thử nghiệm lại, chỉ cần nhấp chuột phải trong cửa sổ tương tác F # và nhấp vào 'Đặt lại phiên tương tác' trong menu ngữ cảnh. Quá trình này sẽ bị giết và khởi động lại, vì vậy bạn có thể bắt đầu lại từ đầu. (Nếu bạn quên khởi động lại quá trình FSI và cố gắng biên dịch lại ứng dụng của bạn, việc biên dịch sẽ mất nhiều thời gian hơn bình thường, sau đó bạn sẽ nhận được thông báo lỗi cho bạn biết trình biên dịch không thể ghi vào tệp đầu ra.)

+1

Một cách dễ dàng hơn để đính kèm trình gỡ lỗi là gọi System.Diagnostics.Debugger.Launch() từ bên trong tập lệnh F #. –

4

Bạn cần đưa đường dẫn đến dự án của mình bằng cách sử dụng chỉ thị #I sau đó bạn có thể tải bản lắp ráp của mình và sử dụng nó. Sau đó tải assembly (chỉ thị #r), mở vùng tên và sau đó có thể gọi các phương thức (và kiểm tra kết quả).

ví dụ:

using System; 

namespace ConsoleApplication1 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      PrintMessage(); 
     } 

     public static void PrintMessage() 
     { 
      Console.WriteLine("Hello World!"); 
     } 
    } 
} 

Và trong F # Interactive:

> #I "full path to debug directory";; 

--> Added 'full path to debug directory' to library include path 

> #r "ConsoleApplication1.exe";; 

--> Referenced 'full path to debug directory\ConsoleApplication1.exe' 

> open ConsoleApplication1;; 
> Program.PrintMessage();; 
Hello World! 
val it : unit =() 

ps: cần phải biên dịch dự án của bạn đầu tiên.

+3

Câu hỏi đặt ra là chèn một điểm ngắt trong C# và sau đó nhìn thấy trong F # REPL. Điều này là khó khăn hơn nhiều - thực tế nó sẽ có một số thủ đoạn đáng kể. –

Các vấn đề liên quan