gdbコマンド集

UMLgdbを使ってカーネルデバッグしようとして気づいた…
「あれ,コマンドなんだったっけ?」 ってことでgdbのコマンドをまとめました

使いそうなコマンド

  • gdb <実行ファイル名>

    • 起動
    • 起動するとターミナルでは(gdb)と出てくる
  • r|run (<引数>)(ファイル名)((>|>>)ファイル名)

  • q|quit

    • gdbを終了する
  • b|break <行番号>|<関数名>|<ファイル名:行番号>

    • ブレイクポイントを指定する
    • 指定した場所で実行を一時停止する
  • delete <ブレイクポイント番号>

    • 指定したブレイクポイントを削除する
    • 番号を指定しなかった場合全削除する
  • n|next

    • 関数中の処理をジャンプする
  • s|step

    • 関数中の処理を追いかける
  • c|cont

    • ブレイクポイントを指定したが,実行を継続する(continue)
  • file <ファイル名>

    • <ファイル名>を選択
  • list

    • 選択しているファイルを10行分表示する
  • p(/<format>) <変数>|*<ポインタ変数>|&<アドレス変数>

    • 変数の出力(print)
    • /<format>で出力書式を指定できる
書式 意味 書式 意味
o 8進表示 d 符号付き10進表示
x 16進表示 u 符号なし10進表示
t 2進表示 c 文字表示
f 浮動小数点表示 a アドレス
  • whatis

    • 変数の型を一覧表示する
  • info b|break

    • 設定しているブレイクポイントの一覧を表示
  • info stack

    • 関数呼び出しスタックの一覧を表示
  • info Thread

    • 存在しているスレッドの一覧を表示
    • 複数のスレッドが走っているプログラムでデッドロックなどを調査するのに使う thread <スレッド番号> where / bt up 2 で詳細を知れる.
    • thread apply <スレッド番号>|(all) <コマンド>で1つのコマンドを複数のスレッドに対して実行できる
  • info locals

    • 関数内の局所変数の名前と値をすべて表示する
  • display <変数>

    • プログラムが停止すると<変数>の値を表示する
  • jump linespec

    • linespecで指定される行において実行を再開
  • jump *address

    • addressで指定されるアドレスにある命令から実行を再開
  • p (char*)<アドレス番号>

  • x/(文字数)c <アドレス番号>

    • アドレス番号からメモリリーク出力(16進数) break <ファイル名>:<関数名> condition <ブレイクポイント番号> <条件> run
  • <ファイル名>の<関数名>にブレイクポイント(<ブレイクポイント番号>)を指定し,さらに<条件>になったときにブレイクする

  • ブレイクポイントを解除するにはcondition <ブレイクポイント番号>とする

    break <ファイル名>:<関数名> run delete watch <条件> c

  • <条件>以外の時にストップさせる

  • deleteでブレイクポイント削除
  • <条件>の指定方法

    • watch(wa) <条件> : <条件>の値が変化した時に停止
    • awatch <変数> : <変数>に値が書き込まれたときに停止
  • set <変数> = <値>

    • 変数を変更できる
  • help (<コマンド>)

    • コマンドのヘルプを表示する
    • コマンドを入力しないとgdb全体のヘルプを表示する

ん〜こんなところかな…

なんかあったらまた追記していきます