gdb や dbx などのデバッガーを実行しているときに、最もトリッキーで便利なコマンドを投稿できますか。
12 に答える
- backtrace full:ローカル変数を使用した完全なバックトレース
- 上、下、フレーム:フレーム間を移動
- ウォッチ:特定の条件が満たされたときにプロセスを一時停止します
- set printpretty on:きれいにフォーマットされたCソースコードを印刷します
- ロギングをオンに設定:デバッグセッションをログに記録して、サポートのために他のユーザーに表示します
- 印刷配列をオンに設定:かなり配列の印刷
- 終了:機能が終了するまで続行します
- 有効化と無効化:ブレークポイントを有効化/無効化します
- tbreak:1回ブレークしてから、ブレークポイントを削除します
- ここで:現在実行中の行番号
- info locals:すべてのローカル変数を表示
- info args:すべての関数の引数を表示
- リスト:ソースを表示
- rbreak:正規表現に一致する関数のブレーク
テキスト形式のユーザー インターフェイスで gdb を起動する
gdb -tui
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.
「-tui」パラメータで GDB を起動する代わりに、「w」と入力してしばらくしてからテキスト モードに切り替えることもできます。
thread apply all bt
or thread apply all print $pc
: すべてのスレッドが何をしているかをすばやく見つけるため。
-command=<file with gdb commands>
gdb の起動中にオプションを使用する。と同じ-x <command file>
。このコマンド ファイルには、ブレークポイント、オプションなどの gdb コマンドを含めることができます。gdb を使用して特定の実行可能ファイルを連続してデバッグ実行する必要がある場合に便利です。
スクリプティング gdb は良いトリックですが、それ以外は、スケジューラーのロックをオン/オフに設定して、他のスレッドに足を踏み入れているときに他のスレッドの実行を防ぐのが好きです。
- .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 進数
これは便利ですが、改善できると確信しています。ようこそ:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)
STL をデバッグするには、コンテンツを .gdbinit に追加し、次の手順に従います。