7

私のシナリオ:例外が発生したコードの一部をログファイルに書き込みたい(たとえば、例外が発生した行の5行前と5行後、または少なくともそのメソッドのすべてのコード)。

私の考えは、C#コードでpdbファイルを逆コンパイルし、その逆コンパイルされたファイルから、catchブロックで例外が発生したメソッドを見つけることです。

Pbdファイルが存在し、私のアプリはデバッグバージョンとしてビルドされています。GUIを介して逆コンパイルを実行できるツール(Reflectorなど)があることは知っていますが、コードからその機能を利用したいと考えています。

どうやってするの?

4

3 に答える 3

5

PDBには、MSILとソースファイル名/行番号の間のマッピングが含まれています。これは、元のソースファイルに戻って確認できる場合に最も役立ちます。これは、逆コンパイルでは通常、行番号が保持されないためです(ただし、PDBファイルも使用されている場合は保持されます)。シンボル名(これもPDBに格納されています)を使用すると、多くの場合、近くにありますが、記述されたとおりに元のコードを復元することはできません。

于 2011-07-04T21:53:18.243 に答える
2

ILSpyのソースコードを調べてください。これは、Reflectorのオープンソースの代替手段です。

特に、ライブラリMono.Cecilとを使用しますMono.Cecil.Pdb。後者はあなたがやりたいことを手伝ってくれると思います。

関連するコード部分は、パーミッシブライセンスであるMITライセンスを使用します。

于 2011-07-04T21:50:34.963 に答える
-1

リフレクションを使用して、実行メソッドのソースコードを取得します。System.Reflection.MethodBase.GetCurrentMethod().GetMethodBody();

MethodBaseメンバーを使用して取得できるさまざまな情報があります:http://msdn.microsoft.com/en-us/library/system.reflection.methodbase_methods.aspx

また、例外処理中にMethodBase情報を取得するためのいくつかの良い例をここで探してください:http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getmethodbody.aspx#Y563

于 2011-07-04T21:56:04.927 に答える