2013-04-29 9 views
9

C#プログラムでブレークポイントを使用している場合、F#REPLを使用して コードを検査したいと思います。これはどんな方法でも可能ですか?Visual Studio 2012でデバッグ時にF#REPLを使用する方法はありますか?#

+0

Visual Studioで直接ウィンドウを確認してください。これはF#REPLではありませんが、非常に便利です。 –

+0

lambdaを使用できないので、C#の直後のウィンドウはうまくいっています – bradgonesurfing

+0

そうです、それは非常にイライラすることに同意します。しかし、私はまだそれを公正な量を使用して見つける。 –

答えて

11

F#REPLでC#プロジェクトをデバッグできるはずです.F#ライブラリプロジェクトをデバッグするときに行いますが、C#アプリケーション/ライブラリも機能します(私は思っています)。

C#プロジェクトをコンパイルします。 F#対話型では、#rディレクティブ(ArthurFSharpの記事を参照)を使用してC#アセンブリを参照してください。 C#コードのどこかにブレークポイントを挿入します。

Visual Studioの場合、Tools - >Attach to Processにアクセスしてください。プロセスのリストでFsi.exeを見つけてダブルクリックします。そこに表示されていない場合は、Fsiプロセスが開始されていることを確認してください(F#Interactiveウィンドウ内をクリックするだけです)。

F#Interactiveでは、設定したブレークポイントに達するコードを実行します。デバッガはあなたが望むようにブレークポイント上で実行を止めるべきです。一部のブレークポイントでデバッガが停止していない限り、実行中のC#アプリケーションの設定を変更するなど、FSI内から別のコードを実行することもできます。

重要: Windowsは、プロセスにロードされるたびにアセンブリをロックします。つまり、FSIが開いている限り、C#アプリケーションを再コンパイルすることはできません。修正は簡単ですが、C#アプリにいくつか変更を加えて再コンパイルしてテストを再開したい場合は、F#Interactiveウィンドウ内を右クリックし、コンテキストメニューの「Reset Interactive Session」をクリックしてください。プロセスが強制終了され、再起動されるので、もう一度やり直すことができます。 (FSIプロセスの再起動を忘れてアプリケーションを再コンパイルしようとすると、コンパイルに通常よりも少し時間がかかります。コンパイラが出力ファイルに書き込めないというエラーメッセージが表示されます)

+1

デバッガを接続するさらに簡単な方法は、F#スクリプト内からSystem.Diagnostics.Debugger.Launch()を呼び出すことです。 –

4

#Iディレクティブを使用してプロジェクトへのパスを含める必要があります。アセンブリをロードして使用することができます。次に、アセンブリ(#rディレクティブ)をロードし、名前空間を開き、メソッドを呼び出して(結果を調べる)ことができます。例えば

using System; 

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

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

そしてF#インタラクティブで:

> #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:最初のプロジェクトをコンパイルする必要があります。

+3

質問は、C#でブレークポイントを挿入し、それをF#REPLで見ることでした。これははるかに困難です - 実際にはいくつかの重大なトリッキーが必要です。 –

関連する問題