C# Language
Stacktracesを読み、理解する
サーチ…
前書き
スタックトレースは、プログラムをデバッグする際に非常に役立ちます。プログラムが例外をスローするとスタックトレースが発生し、プログラムが異常終了することがあります。
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_Click
がSystem.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
コードに従う必要はなく、自分のアプリケーションに属するコードだけが必要です。
だから、なぜこれは "スタックトレース"と呼ばれていますか?
なぜなら、プログラムがメソッドを呼び出すたびに、プログラムはそのメソッドがどこにあったのかを記録するからです。それは "スタック"と呼ばれるデータ構造を持ち、最後の場所をダンプします。
メソッドの実行が完了すると、メソッドを呼び出す前の位置をスタック上で調べ、そこから続行します。
そこでスタックは、新しいメソッドを呼び出す前に、中断した箇所をコンピュータに知らせます。
しかし、デバッグの助けともなります。探偵が犯罪を犯したときに犯した踏み台を追跡するように、プログラマーはスタックを使って、プログラムが墜落する前のステップを追跡することができます。