2009-10-17 16 views
7

Iveは見ていましたが、評価の結果をgdbでどのように表示するかを理解することができませんでした。つまり、以下のコードで、たとえば:gdb - C++の評価結果を印刷するには

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

は、今私はmin_nodeを見て見ることができました(私は文字列のアルファベット順を確認するための可能な方法を試して、それが正常に動作する絶対確実波平た上で)値が変更されても、より複雑なコードでは、これは時にはより複雑になります。私は、gdb /プログラムの流れが現在ある行のテストの評価を見る簡単な方法があるのだろうかと思っていました。

多くの感謝!

答えて

16

あなたが求めているのであれば、gdbには式レベルの単一ステップがありません。

あなたのオプションは、(最も一般的に最も使用頻度が低いと)、次のとおりです。

  1. print strcmp(current_node->word,min_node->word)をやって、GDBで表現を評価します。驚いたことに、これは動作します:gdbは、実行中のプログラムにコードを注入し、コードを実行させることによって、関数呼び出しを評価することができます。もちろん、関数に副作用があるかクラッシュする可能性がある場合、これはかなり危険です。この場合、人々は一般的に潜在的な問題を考えないほど無害です。
  2. 命令レベル(アセンブリ)シングルステッピング(ni/si)を実行します。呼び出し命令が完了すると、プロセッサの規則(x86では%eax)に従って、結果がレジスタに格納されます。
  3. 変数に中間値を割り当て、それを別々の行/文に分割するコードを編集します。通常のシングルステッピングを使用して変数を検査します。
+0

ありがとう、これは助けます! – nero

4

あなたは単にで入力しようとする場合があります。

コール「my_funtion()」などこれまでの機能をインライン化されたとき、それは動作しませんけれども、私は、remberとして

関連する問題