2012-02-08 4 views
2

LinuxプラットフォームでC++で開発されたシステムがあります。私はこのシステムのいくつかのデバッグをしています。関数への関数呼び出しの完全なシーケンスを探したい。機能は、私はfunction_4にブレークポイントを置いた場合、実行はその時点でニコラウスされますgdbを使用したC++での関数呼び出しのトレース

function_1 -> function_2 -> function_3 -> function_4 

次の順序で呼び出されると仮定します。 function_1、function_2、およびfunction_3がfunction_4の前に呼び出されていることを確認したいと思います。これらの関数呼び出しをトレースするgdbコマンドがあれば?

おかげで、 はAnkur

+0

が呼ばれた後、返却を受けるfunction_1いcallgrindツールを使用してvalgrindのです - またはfunction_2()を呼び出しfunction_1いら –

+0

RTFM:それは「BT」または「ST」(バックトレースのようなものですまたはスタックトレース)。 – John3136

+1

'bt'はバックトレースを取得しますが、スタックフレームに依存しています。したがって、それらの関数呼び出しがネストされていない限り(2コール1コール2コール3コール4)、それはうまくいかないでしょう。 – birryree

答えて

7

あなたがバックトレースをしたいです。 gdbコマンドbtは、あなたが興味を持っている正確に何が表示されます

+0

Linuxサーバでbtユーティリティを使用することはできません。 gdbを使って関数呼び出しを見つけることはできませんか? – user982740

+1

'gdb'の中で、' bt'コマンドを入力する必要があります。 – StilesCrisis

+1

また、コールスタックを調べるには、コマンド "frame"またはfを使用します。詳細はこちら:http://www.ofb.net/gnu/gdb/gdb_43.html#SEC43 – fizzbuzz

1

function_1()は、(function_3を呼び出しfunction_2()を呼び出した場合)など

あなたにはあなたのブレークポイントを設定することができますfunction_4()、あなたは、スタックのバックトレースを出力するには、コマンドに

where 
を使用

有用である可能性が

もう1つのツールは、

+0

アドリアンに感謝、これは動作します。これはbtとまったく同じです。ありがとう – user982740

関連する問題