ホームに戻る
出典 :
関連 :
目次 :
スタックトレース情報の取得
プログラム中の特定の時点において、スレッドが開始されてからそこに到達するまでの関数の呼び出し履歴をコールスタックと呼ぶ。
そのコールスタックを追跡することをスタックトレースと呼び、主に例外発生時の原因特定に用いられる。
例外発生時のスタックトレース情報出力 : Exception.StackTrace
(C#)
class Program
{
// Main() メソッド
// プログラムのエントリポイント
static void Main(string[] args)
{
try
{
FuncC();
}
catch (Exception ex)
{
// スタックトレース情報を画面に出力
Console.WriteLine("例外メッセージ --> " + ex.Message);
Console.WriteLine("スタックトレース ");
Console.WriteLine(ex.StackTrace);
}
}
static void FuncC()
{
FuncB();
}
static void FuncB()
{
FuncA();
}
static void FuncA()
{
CallException();
}
static void CallException()
{
throw new Exception("ここで例外を発生させる");
}
}
(出力結果)
例外メッセージ --> ここで例外を発生させる
スタックトレース
場所 StackTraceTest.Program.CallException() 場所 D:\work\test\StackTraceTest\StackTraceTest\Program.cs:行 **
場所 StackTraceTest.Program.FuncA() 場所 D:\work\test\StackTraceTest\StackTraceTest\Program.cs:行 **
場所 StackTraceTest.Program.FuncB() 場所 D:\work\test\StackTraceTest\StackTraceTest\Program.cs:行 **
場所 StackTraceTest.Program.FuncC() 場所 D:\work\test\StackTraceTest\StackTraceTest\Program.cs:行 **
場所 StackTraceTest.Program.Main(String[] args) 場所 D:\work\test\StackTraceTest\StackTraceTest\Program.cs:行 **
Exception.StackTrace プロパティには、スタックトレース情報が文字列形式(StackTrace 型ではない)で格納されている。
このスタックトレース情報は、例外発生時点から呼び元までコールスタックを遡る形で記録されており、メソッドの呼び出し経路を一覧できる。
例外情報の文字出力 : Exception.ToString()
Exception.ToString() をコールすることで、上記のスタックトレースに加え、現在の例外のクラス名とメッセージも取得することができる。
例) ゼロ除算例外
- Exception.StackTrace : スタックトレース情報のみ
場所 Otameshi.Form1.Calculation() 場所 {プロジェクトのパス}\Otameshi\Form1.cs:行 80
場所 Otameshi.Form1.button1_Click(Object sender, EventArgs e) 場所 {プロジェクトのパス}\Otameshi\Form1.cs:行 50
- Exception.ToString() : 例外クラス名、メッセージ、スタックトレース情報
System.DivideByZeroException: 0 で除算しようとしました。
場所 Otameshi.Form1.Calculation() 場所 {プロジェクトのパス}\Otameshi\Form1.cs:行 80
場所 Otameshi.Form1.button2_Click(Object sender, EventArgs e) 場所 {プロジェクトのパス}\Otameshi\Form1.cs:行 50