web-dev-qa-db-ja.com

構造体がGDBにあるフィールドを表示するにはどうすればよいですか?

GDBセッションでngx_http_variable_value_tという構造体に遭遇し、コンソールにあるフィールドを出力したいと思います。

それは可能ですか?

57

GDBコマンドptypeを使用して、構造体またはクラスの定義を出力できます。

103
Nate

デバッグシンボルが組み込まれている場合は、次の値を出力できるはずです:print variableまたはprint *variable構造体へのポインタの場合。

57
LnxPrgr3

set print pretty on

このオプションは、p *my_struct_pointerの改行とインデントも提供します。

どっちがいい:

$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"}

または:

$3 = {
  path = {
    mnt = 0xffff8800070ce1a0, 
    dentry = 0xffff880006850600
  }, 
  last = {
    {
      {
        hash = 3537271320, 
        len = 2
      }, 
      hash_len = 12127205912
    }, 
    name = 0xffff88000659501c "../b.out"
  },
}

コマンドラインオプションの使用に加えて、グラフィカルデバッガも使用できます。 gdbgui をお勧めしますが、かなりの数があります。

screenshot

免責事項:私はgdbguiの開発者です

5
cs01

これは、gdbのグラフィックフロントエンドを通じてのみ実行しました。 gdbオンラインドキュメントでこのエントリを見つけました。それが役に立てば幸い。これには、デバッグ情報を含めてコードを作成する必要があると思います。

ptype [arg] ptypeはwhatisと同じ引数を受け入れますが、型の名前だけではなく、型の詳細な説明を出力します。

GDB:Symbolsを使用したデバッグ

2
Dave L Delaney

Data Display Debugger をご覧ください。

1
gnud
  p *((struct my_struct*) variable)

これは、gdbの構造体の詳細を印刷するのに役立ちます

0