例外を引き起こしたコード行を取得できますか?
-
03-07-2019 - |
質問
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
}