1

重複の可能性:
C または C++ でコール スタックを出力

多くの場合、コードをデバッグするときに、デバッグステートメントを配置した関数を誰が呼び出しているかを把握する必要があります。__FUNCTION__現在の関数の名前に評価されることはわかっていますが、呼び出し先の名前を教えてくれるようなものはありますか? ? それとも、呼び出しスタックを出力しますか?

情報が利用可能である必要があります。segfault になるアサートまたはコードを挿入すると、コール スタック全体を示すスタック トレースが得られます。スタック トレース出力コードはどこでその情報を取得しますか?

プラットフォームに依存しないソリューションを作成できない場合は、x86_64 でコンパイルされた Ubuntu 12.04 で動作するもので十分gccです。他のプラットフォームにもソリューションを提供するためのボーナス ポイント。

4

3 に答える 3

1

これは OS に依存します。

Linux および gcc では、backtrace(3). Windows の場合は、この SO の質問を参照してください。

于 2012-08-14T21:00:38.810 に答える
0

スタックトレースは、呼び出しスタックをウォークしてリターンアドレスを探し、実行可能ファイルを調べてリターンアドレスが戻る関数を見つけることにより、その情報を取得します。そこにポータブルなものはありません。発信者を見つける一般的な方法はありません。最善の方法は、デバッガーで実行し、デバッグコードが起動したときにトリガーするブレークポイントを設定することです。

また、__FUNCTION__は標準C++の一部ではありません。私にはそれはGNUのもののようです。

于 2012-08-14T20:54:28.083 に答える
0

呼び出し元の名前はわかりませんが、組み込み関数_ReturnAddress()は通常、呼び出し元を指すポインターを返します。

于 2012-08-14T21:08:07.413 に答える