2017-02-14 6 views
1

Visual Studio 2015でC#プログラムをデバッグしています。Visual Studio 2015でデバッグ中に最後に実行されたステートメントを知ることはできますか?

tryステートメントのコードのどこかでcatchステートメントにジャンプします。

実行された最後のステートメント、つまり例外を発生させるステートメントを見つけるにはどうすればよいですか?

ありがとうございました。

+8

例外の_stackのtrace_はあなたを示しています。 –

+1

デバッガを使用して、エラーをスローしている場所を見つけるまで、各メソッドをステップスルー(F5)および(F11)に挿入します。 – Mark

答えて

1

try節の各ステートメントにブレークポイントを設定することも、Visual Studioが提供する機能を使用することもできます。下のどこかに(あなたのコンソールがどこにあるか)どこかに "Call Stack"というウィンドウがあります。これは、最後のステートメントが実行された順序を示します。

+1

'catch'ブロックに入っているとき、スタックトレースウィンドウは例外をスローしたステートメントと同じようにスタックを表示しません。 –

6

あなたのスタックトレースを見てみましょう:

static void Main(string[] args) 
{ 
    try 
    { 
     Console.WriteLine("starting"); 
     throw new Exception("Testing"); 
     Console.WriteLine("unreachable"); 
     Console.ReadKey(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
     throw; 
    } 
} 

出力:

が始まる

のSystem.Exception:ConsoleApplication1.Program.Mainで のテスト(文字列[] args)をC:¥Users¥dfield¥Documents¥Visual Studio 2015¥Projects¥ConsoleApplication1¥ConsoleApplication1¥Program.csにあります。

ライン161はthrow new Exception("Testing");

あり、この方法にはいくつかの例外(ほら)おそらくあるある - などStackOverflowExceptionOutOfMemoryExceptionが発生した場合などは、(私が思う)、またはカスタム例外を削除するか、そうでない場合は変更している場合StackTraceオブジェクトはExceptionにあります(私は、これを見ることができないはずのクライアントに返されるスタックトレースを難読化するためにこれを行っています)。また、InnerExceptionのスタックトレースを見なければならないかもしれません。使用してintに文字列を変換しようとしました:

例:あなたは例外をキャッチすると

+0

ありがとうございます。スタックトレースを示すウィンドウがありません。どうすればそのようなウィンドウを開くことができますか? – Tim

+0

'catch'ブロックのエントリにブレークポイントを設定した場合、' ex'変数を調べ、そのスタックトレースを見ることができます。 –

+0

また、__Locals__タブにも表示されますので、そこを調べたり、System.Diagnostics.Debug.WriteLine(ex.ToString()) 'などを使用して__Output__ウィンドウに表示してください –

1

、スタックトレース値を見て、それはあなたの例外は、例外の理由で起こっている場所についてのすべての情報を提供しますInt32.Parse( "Hello");例外がスローされますと、以下のようにスタックトレース:

System.Number.ParseInt32でSystem.Number.StringToNumber(文字列str、NumberStylesオプション、NumberBuffer &数、のNumberFormatInfo情報、ブールparseDecimal) (Stringを、NumberStylesスタイルで、Program.csの中のNumberFormatInfo情報System.Int32.Parseで) Test123で(文字列s)は ():行32

2

はあなたの例外の設定でCommon Language Runtime Exceptionsを有効にしていることを確認してください。オンにすると、エラーがスローされたときにデバッガがブレークし、未処理の場合はチェックが外されます。

enter image description here

enter image description here

1

diagnostic toolsウィンドウを開き、Eventsリストに赤のアイテムを検索します。

例外を発生させる行に直接移動するには、ダブルクリックします。それがスローされた場所

enter image description here

関連する問題