2017-05-24 32 views
0

Windows上で現在実行中のC++プログラムの呼び出しスタックをプログラムで取得する方法の例を挙げることはできますか? 一部のスレッド(print call stack in C or C++など)からDbgHelpを使用するよう提案しました。しかし、ライブラリは非常に大きく、呼び出しスタック以外の多くの機能を意図しているので、サンプルを持たないライブラリを勉強すると時間がかかりすぎる可能性があります。 また、ライブラリの最後のバージョン(6.12)が2010年2月1日(現在は7歳)であるため、ライブラリは廃止されているようです。 C++からコールスタックを取得するための新しいものがありますか?WindowsでC++呼び出しスタックを取得する例

DbgHelpの使用例を示している場合は、インストール方法、プロジェクトへの追加方法、プログラムの同梱方法についても説明できますか?

呼び出しスタック上のすべての関数の装飾されていない名前、好ましくはパラメータの値を取得したいと思います。

+1

[Boost.Stacktrace](http://boostorg.github.io/stacktrace/index.html) – genpfault

答えて

0

ebpをポップしてコールスタックをトラバースするのは膨大な作業ではありません。自分でやりたくない場合は、CaptureStackBackTrace(https://msdn.microsoft.com/en-us/library/windows/desktop/bb204633(v=vs.85).aspx)がそれを行います。

+0

これはアドレスのみを与え、記号(関数名)は与えないことを理解しています。 –

+1

プログラムのコンパイル方法によっては、シンボルが実行可能ファイルに存在しないことさえあります。 –

+0

シンボルを取得することは、あなたが使用したくないことを言及したデバッグヘルプライブラリの後継です。 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679309(v=vs.85).aspx) シンボルは、いくつかのファイルに配置することができます。それらからあなたは可変品質のコールスタックを持っています。 exeファイルからそれらを取り出す場合は、部分的にPEパーサー(https://msdn.microsoft.com/en-us/library/ms809762.aspx)を記述する必要があります。 pdbには最も豊富なシンボルがありますが、自分で解析することはお勧めしません。 –

関連する問題