19

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

そうでない場合、 Exception.Message がクラップアウトしたサブを表示する自動化された方法はありますか?

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

6 に答える 6

48

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

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

于 2009-03-27T02:47:06.213 に答える
31

特定の例外のスタック トレースを表示するには、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 ファイルがあることを確認します。

于 2010-08-06T17:42:13.610 に答える
4

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

于 2009-03-27T02:47:39.003 に答える
0
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
于 2014-12-20T18:20:03.693 に答える