137

您能否在运行 gdb 或 dbx 之类的调试器时发布最棘手和最有用的命令。

4

12 回答 12

137
  1. backtrace full:使用局部变量完成回溯
  2. up , down , frame : 在帧间移动
  3. watch:满足某个条件时暂停进程
  4. set print pretty on:打印出格式精美的 C 源代码
  5. 设置登录:记录调试会话以显示给其他人以获得支持
  6. 设置打印数组:漂亮的数组打印
  7. finish : 持续到函数结束
  8. enabledisable:启用/禁用断点
  9. tbreak:中断一次,然后删除断点
  10. where:当前正在执行的行号
  11. info locals : 查看所有局部变量
  12. info args : 查看所有函数参数
  13. 列表:查看源代码
  14. rbreak : 在函数匹配正则表达式时中断
于 2009-09-24T12:20:41.617 回答
103

使用文本用户界面启动 gdb

gdb -tui
于 2009-09-27T10:30:08.280 回答
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.
于 2009-09-27T10:49:38.417 回答
21

除了使用“-tui”参数启动 GDB 之外,您还可以在使用一段时间后通过键入“wh”切换到文本模式。

于 2009-10-09T07:53:34.870 回答
16

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

于 2009-09-27T09:50:58.423 回答
6

例如stl-views.gdb中定义的宏

于 2009-09-24T12:06:56.903 回答
6

-command=<file with gdb commands>在启动 gdb 时使用该选项。与 相同-x <command file>。此命令文件可以包含 gdb 命令,如断点、选项等。在需要使用 gdb 进行连续调试运行的特定可执行文件的情况下很有用。

于 2009-12-15T13:47:58.683 回答
5

编写 gdb 脚本是一个很好的技巧,除了我喜欢设置调度程序锁定打开/关闭以防止在您介入时运行其他线程。

于 2009-10-10T08:28:53.930 回答
4
  • 使用.gdbinit(启动文件,您可以在其中编写宏并从 gdb 调用)。将 .gdbinit 放在您的主目录中,以便每次加载 gdb 时都会将其拾取
  • info threads列出所有活动线程,以及 f(#) -> # 要切换到的线程号

  • 有时我使用 gdb 将十六进制转换为十进制或二进制,它非常方便,而不是打开计算器

    • p/d 0x10 -> 给出 0x10 的十进制等效值
    • p/t 0x10 -> 二进制等价于 0x10
    • p/x 256 -> 相当于 256 的十六进制
于 2009-10-13T16:42:24.243 回答
4

不要使用 -tui 选项启动 gdb 来查看包含突出显示程序中正在执行的代码行的屏幕的子进程,而是使用 Cx o 和 Cx a 跳入和跳出此功能。如果您正在使用该功能以及暂时不使用它的内容,这很有用,因此您可以使用向上箭头获取上一个命令。

于 2011-12-02T02:44:24.217 回答
3

这可能很有用,我相信它可以改进,欢迎帮助:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)
于 2010-01-20T16:10:45.280 回答
2

要调试 STL,请将内容添加到 .gdbinit,请按照以下说明操作:

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

于 2010-11-29T11:00:56.177 回答