2013-04-29 11 views
9

Jeśli mam punkt przerwania w programie C# chciałbym użyć F # REPL do sprawdzenia mojego kodu . Czy jest to możliwe w jakikolwiek sposób?Czy istnieje sposób w Visual Studio 2012 do użycia F # REPL podczas debugowania C#

+0

Sprawdź bezpośrednie okno w Visual Studio. To nie jest F # REPL, ale jest całkiem użyteczne. –

+0

Bezpośrednie okno w C# jest niedorzeczne, ponieważ nie możesz używać lambdas – bradgonesurfing

+0

. Zgadzam się, to bardzo frustrujące. Ale nadal uważam, że używam go w rozsądnej ilości. –

Odpowiedz

11

Powinieneś być w stanie debugować projekt C# za pomocą F # REPL - robię to podczas debugowania projektów bibliotek F #, ale aplikacje/biblioteki C# również będą działały (myślę).

Skompiluj projekt C#. W języku F #, odwołaj się do zestawu C#, używając dyrektywy #r (patrz post ArthurFSharp). Wstaw punkt przerwania gdzieś w twoim kodzie C#.

W Visual Studio przejdź do Tools ->Attach to Process. Znajdź Fsi.exe na liście procesów i kliknij go dwukrotnie; jeśli go tam nie widzisz, upewnij się, że proces Fsi został uruchomiony (wystarczy kliknąć w oknie F # Interactive).

W F # Interactive, wykonaj trochę kodu, który osiągnie ustawiony punkt przerwania; debugger powinien zatrzymać wykonywanie w punkcie przerwania, tak jak chcesz. Tak długo jak debugger nie jest zatrzymywany w pewnym punkcie przerwania, możesz również wykonać inny kod z poziomu FSI, na przykład aby zmienić ustawienia w uruchomionej aplikacji C#.

WAŻNE: Należy pamiętać, że system Windows blokuje zestaw po załadowaniu go do procesu. Oznacza to, że nie będzie można przekompilować aplikacji C#, dopóki otwarty jest FSI! Poprawka jest prosta - po wprowadzeniu pewnych zmian w aplikacji C# i ponownym skompilowaniu i rozpoczęciu testowania ponownie, kliknij prawym przyciskiem myszy w oknie F # Interactive i kliknij "Resetuj interaktywną sesję" w menu kontekstowym. Proces zostanie zabity i uruchomiony ponownie, abyś mógł zacząć wszystko od nowa. (Jeśli zapomnisz zrestartować proces FSI i spróbujesz przekompilować swoją aplikację, kompilacja potrwa nieco dłużej niż normalnie, wtedy pojawi się komunikat o błędzie informujący, że kompilator nie mógł zapisać do pliku wyjściowego.)

+1

Jeszcze łatwiejszym sposobem dołączenia debuggera jest wywołanie System.Diagnostics.Debugger.Launch() z poziomu skryptu F #. –

4

Musisz podać ścieżkę do projektu za pomocą dyrektywy #I, a następnie możesz załadować swój zespół i użyć go. Następnie załaduj zespół (dyrektywa #r), otwórz przestrzeń nazw, a następnie możesz wywołać metody (i sprawdzić wynik).

na przykład:

using System; 

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

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

A w 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: potrzeba opracowania projektów pierwszy.

+3

Pytanie dotyczyło wstawienia punktu przerwania w języku C#, a następnie zobaczenia go w F # REPL. Jest to o wiele trudniejsze - w rzeczywistości wymaga to znacznego oszustwa. –

Powiązane problemy