gdbデバッガーの最もトリッキーで便利なコマンド[終了]


138

gdbやdbxなどのデバッガーを実行しているときに、最もトリッキーで便利なコマンドを投稿できますか。


このドキュメントは良いと思いました。scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/...
リック

回答:


134
  1. backtrace full:ローカル変数で完全なバックトレース
  2. フレーム:フレーム間を移動
  3. watch:特定の条件が満たされたときにプロセスを一時停止します
  4. set print pretty onきれいにフォーマットされたCソースコードを出力します
  5. ロギングの設定:デバッグセッションをログに記録して、サポートのために他のユーザーに表示します
  6. 印刷配列をオンに設定する:きれいな配列の印刷
  7. finish:関数の終わりまで続行します
  8. enableおよびdisable:ブレークポイントを有効/無効にします
  9. tbreak:一度ブレークしてからブレークポイントを削除します
  10. 場所:現在実行されている行番号
  11. info locals:すべてのローカル変数を表示します
  12. info args:すべての関数引数を表示します
  13. リスト:ソースを表示
  14. rbreak:正規表現に一致する関数で中断

7
info locals-すべてのローカル変数を表示します。リスト-ソースを表示; rbreak-正規表現に一致する関数で中断します。
ポールビガー

source / path / to / macro / fileそして私の気の利いたマクロはすべて、数秒でデバッグするのに役立ちます。
Sudhanshu

1
set print object onポリモーフィック要素の場合、set print elements 0私が頻繁に使用する2つのコマンドです。かなり便利です。
キリルキーロフ

1
また、t a a bt(を意味しますthread apply all backtrace)。他のほとんどすべてのコマンドで使用できます。特にで役立ちbt fullます。
キリルキーロフ

101

テキストユーザーインターフェイスでgdbを起動する

gdb -tui

21
この機能が長年にわたって私から逃れたとは思えません。ありがとう、ありがとう、ありがとう!
DevSolar 2009

ありがとう私の時間を大幅に節約してくれました
。Wonderfull

1
そしてもう1つ:<マイナス> RET
SullX

1
またはcgdbを
Patryk

とても素敵な機能。これまで見逃していた...
PraveenMax 2017年

45

gdb 7.0以降では、デバッグ元に戻せるようになっているため、お気に入りの新しいコマンドは次のとおりです。

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

21

「-tui」パラメータを使用してGDBを起動する代わりに、「wh」と入力して、しばらくしてからテキストモードに切り替えることもできます。


3
Ctrl-a aで「通常」のコマンドラインビューに切り替えます。
ケビン

2
「-」は「wh」の代わりに使用できます。短いほど良いです.. :)
raj_gt1

6
Ctrl-a a?それは冗談ですか?tmux/ screenコマンドのように見えます。そして、私にはうまくいきません。これは、のいずれかでなければなりませんようあたりのドキュメントC-x C-aC-x aC-x A
x-yuri 2015年

それは実際C-x aです。また、Tuiモードでビューを切り替えてC-x 1C-x 2アセンブリを表示することもできます(必要な場合)。
Sam Whitlock

16

thread apply all btまたはthread apply all print $pc:すべてのスレッドが何をしているかをすばやく見つけるため。


それは私が長い間探していたコマンドでした!30スレッドすべてを1つずつチェックするのは本当に厄介です!
tothphu 2013


6

-command=<file with gdb commands>gdbの起動中にオプションを使用する。と同じ-x <command file>。このコマンドファイルには、ブレークポイント、オプションなどのgdbコマンドを含めることができます。特定の実行可能ファイルをgdbを使用して連続してデバッグ実行する必要がある場合に役立ちます。


この-iexオプションを使用して、gdbコマンドラインで個々のコマンドを追加することもできます。
doug65536 2017

5

スクリプトgdbは良いトリックですが、他のスレッドが実行中に実行されないように、スケジューラーのロックをオン/オフに設定するのが好きです。


1
スケジューラのロックをどのように設定しますか?
deft_code

3
set scheduler-locking ongdb内
Ben

これをデフォルトにするにはどうすればよいですか?.gdbinitを試しましたが、gdbは/home/omry/.gdbinit:1を出力します:ソースコマンドファイルのエラー:ターゲット 'None'はこのコマンドをサポートできません。
Omry Yadan 2014

4
  • 使用する .gdbinitする(マクロを記述してgdbから呼び出すことができる起動ファイル)。.gdbinitをホームディレクトリに配置して、gdbが読み込まれるたびに取得されるようにします。
  • すべてのアクティブなスレッドをリストするinfoスレッド、および切り替え先のf(#)->#スレッド番号

  • ときどき、gdbを使用して16進数から10進数または2進数に変換します。電卓を開く代わりに非常に便利です。

    • p / d 0x10-> 0x10に相当する10進数を与える
    • p / t 0x10-> 0x10に相当するバイナリ
    • p / x 256-> 256に相当する16進数

4

オプション-tuiを使用してgdbを起動し、コードの実行行がプログラム内のどこにあるかを強調表示する画面を含む子プロセスを表示する代わりに、Cx oおよびCx aを使用して、この機能にジャンプします。これは、機能を使用していて一時的にそれを使用しない場合に便利です。上矢印を使用して前のコマンドを取得できます。


2
focus cmd上/下矢印が機能するように、フォーカスをコマンドウィンドウに変更できます。を使用して切り替えますfocus src
Nathan Fellman、2014

3

これは便利ですが、改善できると確信しています。

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.