質問

GetFileName()ファイルを読み取り、スタックフレームの GetFileLineNumber()行から読み取る

以外
new StackTrace(exception).GetFrame(x)

例外を引き起こした実際のコード行を(文字列として)取得する方法はありますか?

ありがとう

役に立ちましたか?

解決

ポストモーテムデバッグは困難ですが、不可能ではありません。使用できるツールがあります(こちらおよびここなど)およびテクニック

他のヒント

そうは思いません。コードがコンパイルされるため、使用できなくなります。 ただし、ソースコードを 利用できる場合は、いくつかの回避策があります。

いいえ、私が知る限り、それが唯一の選択肢です。例外の原因となった元のコード行を取得するには、ソースを利用可能にする必要があります。 StackFrame 既に行番号を取得できます(ほとんどの場合、PDBファイルであるデバッグシンボルを使用)。

提案した方法に特定の問題はありますか?

行情報はDLLファイルに保存されないため、これを行う確実な方法はありません。 ILのブロックをソースコード行にマッピングする情報は、PDBファイル内に保存されます。例外の行情報を取得するには、PDBにアクセスする必要があります。

PDBが利用可能な場合、適切なISymUnmanagedMethodクラスを取得するのに十分な情報がStackFrameクラスにあります。主に必要なのは、メソッドトークンとメソッドへの現在のオフセットだけです。これには、PDBの内部構造を理解する必要があり、どこに文書化されているかはわかりません。

PDB API: http://msdn.microsoft.com/en- us / library / ms233503.aspx

これはコンパイルされるため、実行時にはILのみが必要になります。よくても、リフレクターと同じように、ILを取得してC#に逆コンパイルできます。

try catch ブロックを使用して行を取得できます:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top