web-dev-qa-db-ja.com

gdbデバッガーの最もトリッキー/便利なコマンド

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

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

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

gdb -tui
99
Amro

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.
43
Paul Biggar

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

20
martin

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

14
Olof

たとえば、 stl-views.gdb で定義されているマクロ

6
grigy

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

6
raghava

gdbのスクリプティングは、他のスレッドがステップインしたときに他のスレッドが実行されないようにスケジューラのロックをオン/オフに設定するのが好きなことを除けば、良いトリックです。

5
Ben

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

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

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

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

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

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

STLをデバッグするには、コンテンツを.gdbinitに追加し、次の手順に従います。

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

2
Bob Yoplait