2016-04-30 27 views
2

Invokeという小さなC#ライブラリプロトタイプを作成しました。node.js経由で電子エッジアプリケーションにVisual Studioデバッガを接続

public class TestClass 
{ 
    public async Task<object> Invoke(dynamic input) 
    { 
     Dictionary<Type, IReport> reports = new Dictionary<Type, IReport> 
     { 
      {typeof (LevelOne), new LevelOneReport()}, 
      {typeof (LevelTwo), new LevelTwoReport()} 
     }; 

     ILevel toTestLevel1 = new LevelOne(1); 
     ILevel toTestLevel2 = new LevelTwo(2); 

     IReport report = reports[toTestLevel2.GetType()]; 
     return report.Generate(toTestLevel2); 
    } 
} 

この関数の結果は、intという新しいオブジェクトです。私は私のnode/electron/edge.jsアプリケーションで、データがC#dllからアプリケーションに正常に渡されていることを確認しました。 (つまり、C#コードとJavaScriptが一緒に動作していると思います)

これはより複雑なシステムのプロトタイプですので、Visual Studioデバッガをノード?)プロセスで、C#dll用のデバッグシンボルファイルをロードして、Edge.jsドキュメント(the github page hereを参照)に従ってC#dllをステップ実行させてください。私はC#dllと.pdbファイルを電子アプリケーションディレクトリにコピーしました。

私はVisual StudioのC#クラスにブレークポイントを設定し、デバッガを "Managed" node.exeプロセスにアタッチするようになりました。私が気づいた最初のことは、2つのnode.exeプロセスが実行されていて、どちらもドキュメンテーションに記載されている「管理」の説明がなかったことです。

私は最初に1つ、次にもう1つは接続しようとしましたが、C#dll関数のedge.js呼び出しの後にブレークポイントを取得できませんでした。私はデバッグ - > Windows - >モジュールをチェックし、モジュールが実際にロードされていないことを確認しました。私はデバッガを電子プロセス(「Managed」という記述があります)に添付して、C#dllにDebug> Windows-> Modulesページのシンボルが突然表示されました。ああ、私のブレークポイントはまだヒットしていませんでした。

Visual Studioでデバッガを実際にノード/電子アプリケーションに接続し、関連付けられたC#DLLで詳細なデバッグを可能にする方法があれば誰にも分かりますか?

答えて

3

わかりました。 3つのelectron.exeプロセスも実行されています。 Visual StudioでDebug-> Windows-> Modulesビューアを開いたまま、電子/エッジ/ノードアプリケーションを実行しました。そこにあるデバッグツールを使用して、私はC#dllへの関数呼び出しの前にブレークポイントを入れて実行しました。それはブレークポイントで停止しました。その後、最初のelectron.exeプロセスにデバッガをアタッチし、C#クラスにブレークポイントを設定しました。私はC#ライブラリへの私の呼び出しを踏んだ。私は各electron.exeプロセスのプロセスを繰り返しました。 「管理された」記述が機能しているelectron.exeプロセスは、C#dllでブレークポイントに達し、コードをステップ実行できました!電子アプリからC#コードへの呼び出しを行うたびに、デバッグシンボルがVisual Studioでモジュールビューアに読み込まれていることがわかりました。

EDITさらに、 "管理"電子プロセスは、javascriptで電子エッジ要求機能が呼び出されるまで表示されません。したがって、 "Managed"電子プロセスが表示されない場合は、この呼び出しの後にブレークポイントが設定されていることを確認してください。

関連する問題