通常assert(0);
、C++ コードに を挿入し、Windbg を起動し、F5 キーを押して Enter を押すk
と、スタック トレースが取得されます。次に、マウスでコピーして貼り付けて終了する必要があります。
しかし、私はこれを自動化したい。GUI を手動で使用せずに、スタック トレースを取得してテキスト ファイルに書き込む方法はありますか?
まず、GUIからの出力を次の.logopen
ように使用してテキストファイルに書き込むことができます。
.logopen c:\dump\myLog.txt
これにより、すべてがこの場所にダンプされます。呼び出し.logclose
てログを閉じ、1行で次のようにします。
.logopen c:\dump\myLog.txt; k; .logclose
次に、本当にGUIを使用したくない場合は、コマンドラインバージョンのwindbg、cdbがあります。次のようないくつかのコマンドでこれを実行できます。
cdb -log c:\data\myLog.txt -lines -pn myApp.exe -c ".symfix;.reload;k;qd"
これにより、コールスタックの行番号がオンになり、ログに出力され、名前を使用してプロセスにアタッチされてから、MSのシンボルサーバーを修正し、リロードし、コールスタックをダンプし、終了してデタッチするコマンドを二重引用符で囲んで実行します。
これ以上デバッグしようとせず、スタック トレースを取得しようとしていると仮定すると、この関数を呼び出して出力をファイルに書き込むだけです。
CaptureStackBackTrace ( http://msdn.microsoft.com/en-us/library/bb204633(VS.85).aspx?ppud=4 )