12

Java でコードを書くときは、Eclipse に組み込まれているデバッガーを使用します。このコンテキストでオブジェクトを視覚化する場合、デバッガーは toString() 関数を自動的に呼び出します。この機能は、プログラムの状態を調べながらすばやく視覚化するのに非常に便利な機能です。

現在、C で作業するときは、デバッグに emacs+gdb を使用しますが、複雑な C 構造を視覚化する (つまり、特定の印刷関数を呼び出す) ための同等の機能を見つける/再作成することができませんでした。もちろん、一般的な toString() メソッドはありませんが、とにかく、構造体の印刷関数をどこかに実装することがよくあります。

しかし、gdb で何かを視覚化したいときは、これらの印刷関数を gdb から手動で呼び出さなければならp my_print_function(my_struct_pointer)ず、非常に非効率的です (その名前を覚えて、正しく入力する必要があり、さらに標準出力が別のウィンドウにある可能性があります...) .

私が望むのは、「構造体ポインター型Tで gdb print 関数を呼び出すときに、そのユーザー定義の印刷関数f ... を自動的に呼び出す」ように gdb を構成することです。これを行う方法はありますか?前もって感謝します。

4

3 に答える 3

7

print struct_var特定の構造体のメンバーを出力するために使用します

print *struct_ptr指定された構造体ポインターのメンバーを出力するために使用します

set print pretty on次のように、gdb に 1 行に 1 つのメンバーを含むインデント形式で構造を出力させたい場合に使用します。

$1 = {
        next = 0x0,
        flags = {
          sweet = 1,
          sour = 1
        },
        meat = 0x54 "Pork"
      }

ptype struct_varまた、特定の構造体の定義を出力するために使用することもできます

詳細はこちら

于 2013-03-01T15:08:46.587 に答える
5

良い質問。

はい、そう思います。GDB 7 はPython で書かれた "pretty-printers"をサポートしているようです。(私の意見では)実際のターゲット言語で既に作成されたコードを使用するほど便利ではありませんが、おそらく十分です。

これらはpretty-printer を操作するためのコマンドです。

于 2013-03-01T15:05:14.177 に答える