コードギアC++ビルダープロジェクトがあり、例外が発生したときにスタックダンプを取得するためにJCLライブラリを追加しました。スタックダンプを取得しましたが、最も重要なのは、例外が実際に発生した行番号です。関数名はわかりますが、関数の長さが30行の場合、問題がどこにあるかを推測するのは簡単ではありません。
ここで何かが足りませんか?
コードギアC++ビルダープロジェクトがあり、例外が発生したときにスタックダンプを取得するためにJCLライブラリを追加しました。スタックダンプを取得しましたが、最も重要なのは、例外が実際に発生した行番号です。関数名はわかりますが、関数の長さが30行の場合、問題がどこにあるかを推測するのは簡単ではありません。
ここで何かが足りませんか?
さらに調査したところ、少なくとも現在は Delphi 2007 を使用して動作します。C++ Builder でも同じように動作すると思います。
私の推測では、コンパイラ オプションの [デバッグ DCU を使用する] もデバッグ情報をチェックしていないということです。Delphi examples\windows\debug\stacktrack\StackTrackDemoMain.pasでコンパイルされた JCL に含まれている例を試しました 。
出力の例を次に示します。
[0047C478]{StackTrackExample.exe} StackTrackDemoMain.TMainForm.Button1Click (Line 49, "StackTrackDemoMain.pas")
[00442590]{StackTrackExample.exe} Controls.TControl.Click (Line 5229, "Controls.pas")
[00446083]{StackTrackExample.exe} Controls.TWinControl.WndProc (Line 7304, "Controls.pas")
[0042ECB8]{StackTrackExample.exe} StdCtrls.TButtonControl.WndProc (Line 3684, "StdCtrls.pas")
[004461D3]{StackTrackExample.exe} Controls.DoControlMsg (Line 7353, "Controls.pas")
[00446083]{StackTrackExample.exe} Controls.TWinControl.WndProc (Line 7304, "Controls.pas")
[004577A3]{StackTrackExample.exe} Forms.TCustomForm.WndProc (Line 3512, "Forms.pas")
[004457AC]{StackTrackExample.exe} Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas")
[0041EC14]{StackTrackExample.exe} Classes.StdWndProc (Line 11583, "common\Classes.pas")
[0044617F]{StackTrackExample.exe} Controls.TWinControl.DefaultHandler (Line 7334, "Controls.pas")
[00446083]{StackTrackExample.exe} Controls.TWinControl.WndProc (Line 7304, "Controls.pas")
[0042ECB8]{StackTrackExample.exe} StdCtrls.TButtonControl.WndProc (Line 3684, "StdCtrls.pas")
[0041EC14]{StackTrackExample.exe} Classes.StdWndProc (Line 11583, "common\Classes.pas")
注: ファイル StackTrackDemoMain.pas メソッド TMainForm.ApplicationEventsException を変更しました
に
JclLastExceptStackListToStrings(ExceptionLogMemo.Lines, True, False, False, False);
幸運を!