web-dev-qa-db-ja.com

例外処理で行番号を表示する

エラーの原因となった行番号をどのように表示しますか?これは、.NETが.exeをコンパイルする方法でも可能ですか?

そうでない場合は、Exception.Messageが機能しなくなったサブを表示する自動化された方法はありますか?

try
{
  int x = textbox1.Text;
}
catch(Exception ex)
{
     MessageBox.Show(ex.Message);
}
19
Crash893

ex.ToString()を使用して、完全なスタックトレースを取得します。

行番号を取得するには、リリースモードであっても、デバッグシンボル(.pdbファイル)を使用してコンパイルする必要があります(これはプロジェクトビルドプロパティのオプションです)。

46
Steven A. Lowe

特定の例外のスタックトレースを表示するには、 e.StackTrace を使用します。

より詳細な情報が必要な場合は、 System.Diagnostics.StackTrace クラスを使用できます(ここに試してみるコードがあります)。

try
{
    throw new Exception();
}
catch (Exception ex)
{
    //Get a StackTrace object for the exception
    StackTrace st = new StackTrace(ex, true);

    //Get the first stack frame
    StackFrame frame = st.GetFrame(0);

    //Get the file name
    string fileName = frame.GetFileName();

    //Get the method name
    string methodName = frame.GetMethod().Name;

    //Get the line number from the stack frame
    int line = frame.GetFileLineNumber();

    //Get the column number
    int col = frame.GetFileColumnNumber();
}

これは、アセンブリで使用可能なpdbファイルがある場合にのみ機能します。プロジェクトのプロパティ-ビルドタブ-詳細-デバッグ情報の選択を参照して、pdbファイルがあることを確認してください。

29
Gabriel McAdams

'StackTrace' を使用し、作業ディレクトリに.pdbファイルを含める場合、スタックトレースには行番号が含まれている必要があります。

4
Mitch Wheat
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
1
Ahmed Elzeiny