エラーが発生した行番号をどのように表示し、.NETがその.exesをコンパイルする方法でもこれが可能ですか?例外処理で行番号を表示する
もしそうでない場合は、Exception.Messageが自動的に削除されたサブを表示する方法がありますか?
try
{
int x = textbox1.Text;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
エラーが発生した行番号をどのように表示し、.NETがその.exesをコンパイルする方法でもこれが可能ですか?例外処理で行番号を表示する
もしそうでない場合は、Exception.Messageが自動的に削除されたサブを表示する方法がありますか?
try
{
int x = textbox1.Text;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
完全なスタックトレースを取得するには、ex.ToString()
を使用します。
リリースモードであってもデバッグシンボル(.pdbファイル)を使用してコンパイルして、行番号を取得する必要があります(これはプロジェクトビルドプロパティのオプションです)。
+1のPDBファイルと行番号 –
Webプロジェクトで、サーバーにpdbsを配備する場合は、[Package/Publish Web]セクションのプロジェクトオプションで、[生成されたデバッグシンボルを除外]をオフにします。 –
誰かが「デバッグシンボルを使ってコンパイル」についての説明を提供することはできますか? 私のプロジェクトには「DEBUG定数の定義」、「TRACE定数の定義」、「デバッグ情報:完全」という行番号がありません。 MSDNでは、プロパティページの左ペインの[ビルド]タブをクリックし、有効にするコンパイラ設定のチェックボックスをオンにします。無効にする設定のチェックボックスをオフにします。 便利です。 – omJohn8372
'StackTrace'を使用し、作業ディレクトリに.pdbファイルを含める場合は、スタックトレースに行番号を含める必要があります。
あなたはより詳細な情報が必要な場合は、System.Diagnostics.StackTraceクラス(ここではあなたがしようとするためのいくつかのコードがある)を使用することができますe.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ファイルがあることを確認してください。
なぜ最初のスタックフレームを取得しますか?あなたはむしろ最後のスタックフレームに興味を持っていませんか?つまり StackFrame frame = st.GetFrame(st.FrameCount - 1) –
これをWCF Webサービスで使用しようとしましたが、返される行番号は常に0です。これは.pdbファイルが存在するデバッグモードです。 –
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);
このコードはどのようにコンパイルされますか? –
それは私がちょうど例として示すためにそれを作っていない – Crash893
可能な複製http://stackoverflow.com/questions/8338495/how-to-get-error-line-number-of-code-using-try-catch –