Gdb 调试器最棘手/最有用的命令

在运行 gdb 或 dbx 之类的调试器时,是否可以发布最复杂和最有用的命令。

40695 次浏览

例如,在 Stl-views. gdb中定义的宏

  1. Backtrace full : 使用本地变量完成回溯
  2. 向上 放下相框: 通过帧移动
  3. Watch : 在满足某个条件时暂停进程
  4. 设置 print pretty on : 打印出格式漂亮的 C 源代码
  5. 上设置日志记录: 日志调试会话以显示给其他人以获得支持
  6. 上设置打印数组: 漂亮的数组打印
  7. 完成 : 继续到函数结束
  8. 启用 关闭: 启用/禁用断点
  9. Tbreak : 中断一次,然后删除断点
  10. 在哪里 : 当前正在执行的行号
  11. Info local : 查看所有局部变量
  12. Info args : 查看所有函数参数
  13. 列表 : 查看源代码
  14. Rbreak : 函数匹配正则表达式时的 break

thread apply all btthread apply all print $pc: 用于快速查明所有线程正在做什么。

以一个基于文本的用户界面开始 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 不同,您还可以在使用一段时间后通过键入“ wh”切换到文本模式。

编写 gdb 脚本是一个很好的技巧,除此之外我喜欢 将调度程序锁定设置为打开/关闭,以防止单步执行其中一个线程时运行其他线程。

  • 使用 。 gdbinit(启动文件,可以在其中编写宏并从 gdb 调用)。地点。Gdbinit,这样每次加载 gdb 时都会拾取它
  • Info thread 以列出所有活动线程,以及 f (#)-> # 线程编号您想切换到

  • 有时候我会用 gdb 把十六进制转换成十进制或二进制,这样比打开计算器更方便

    • P/d 0x10-> 给出了十进制等价于0x10
    • P/t 0x10-> 二进制等效的0x10
    • P/x256-> 十六进制相当于256

启动 gdb 时使用 -command=<file with gdb commands>选项。和 -x <command file>一样。这个命令文件可以包含 gdb 命令,如断点、选项等。如果某个特定的可执行文件需要使用 gdb 进行连续的调试运行,那么这种方法非常有用。

这可能是有用的,但我确信它可以得到改进,有助于欢迎:

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

要调试 STL,请将内容添加到. gdbinit,请遵循以下说明:

Http://www.yolinux.com/tutorials/gdb-commands.html#stlderef

不要使用选项-tui 启动 gdb 来查看一个包含屏幕的子进程,该屏幕会突出显示程序中正在执行的代码行的位置,而是使用 C-x o 和 C-x a 跳入和跳出这个特性。如果您正在使用该特性,以及暂时不使用它的内容,那么这将非常有用,这样您就可以使用向上箭头来获取以前的命令。