サーチ…


前書き

スタックトレースは、プログラムをデバッグする際に非常に役立ちます。プログラムが例外をスローするとスタックトレースが発生し、プログラムが異常終了することがあります。

Windowsフォームでの単純なNullReferenceExceptionのスタックトレース

例外をスローする小さなコードを作成しましょう:

private void button1_Click(object sender, EventArgs e)
{
    string msg = null;
    msg.ToCharArray();
}

これを実行すると、次の例外とスタックトレースが取得されます。

System.NullReferenceException: "Object reference not set to an instance of an object."
   at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in F:\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 29
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

スタックトレースはそういうものですが、この部分は私たちの目的には十分です。

スタックトレースの最上部には次の行があります。

F:\ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.csのWindowsFormsApplication1.Form1.button1_Click(オブジェクト送信者、EventArgs e):行29

これが最も重要な部分です。これは、例外が発生した正確な行を示しています。Form1.csの29行目。
だから、これがあなたの検索を始める場所です。

2行目は

System.Windows.Forms.Control.OnClick(EventArgs e)

これはbutton1_Clickを呼び出したbutton1_Clickです。これで、エラーが発生したbutton1_ClickSystem.Windows.Forms.Control.OnClickから呼び出されたことがbutton1_Click

私たちはこれを続けることができます。 3行目は

System.Windows.Forms.Button.OnClick(EventArgs e)

これはSystem.windows.Forms.Control.OnClickを呼び出したコードです。

スタックトレースは、コードでExceptionが発生するまで呼び出された関数のリストです。これを実行することで、コードが問題に遭遇するまでどのコードが実行されたかを知ることができます。

スタックトレースには.Netシステムからの呼び出しが含まれています。何が問題になったのかを知るために、通常、すべてのMicrosoftのSystem.Windows.Formsコードに従う必要はなく、自分のアプリケーションに属するコードだけが必要です。

だから、なぜこれは "スタックトレース"と呼ばれていますか?
なぜなら、プログラムがメソッドを呼び出すたびに、プログラムはそのメソッドがどこにあったのかを記録するからです。それは "スタック"と呼ばれるデータ構造を持ち、最後の場所をダンプします。
メソッドの実行が完了すると、メソッドを呼び出す前の位置をスタック上で調べ、そこから続行します。

そこでスタックは、新しいメソッドを呼び出す前に、中断した箇所をコンピュータに知らせます。

しかし、デバッグの助けともなります。探偵が犯罪を犯したときに犯した踏み台を追跡するように、プログラマーはスタックを使って、プログラムが墜落する前のステップを追跡することができます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow