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

时间:2009-09-24 11:59:04

标签: c unix gdb debugging dbx

在运行像gdb或dbx这样的调试器时,是否可以发布最棘手和最有用的命令。

12 个答案:

答案 0 :(得分:132)

  1. 回溯完整:使用本地变量完成回溯
  2. 向上向下框架:移动框架
  3. watch :在满足特定条件时暂停流程
  4. 上设置打印:打印出格式化的C源代码
  5. 设置登录:记录调试会话以向其他人显示支持
  6. 上设置打印数组:漂亮阵列打印
  7. 完成:继续直到功能结束
  8. 启用禁用:启用/禁用断点
  9. tbreak :中断一次,然后删除断点
  10. 其中:当前正在执行的行号
  11. info locals :查看所有本地变量
  12. info args :查看所有函数参数
  13. list :查看来源
  14. rbreak :打破功能匹配正则表达式

答案 1 :(得分:99)

使用文本用户界面启动gdb

gdb -tui

答案 2 :(得分:42)

从gdb 7.0开始,有reversible debugging,所以你最喜欢的新命令是:

* 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.

答案 3 :(得分:20)

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

答案 4 :(得分:14)

thread apply all btthread apply all print $pc:快速查找所有主题的内容。

答案 5 :(得分:6)

例如stl-views.gdb

中定义的宏

答案 6 :(得分:6)

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

答案 7 :(得分:5)

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

答案 8 :(得分:4)

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

答案 9 :(得分:3)

  • 使用 .gdbinit (启动文件,您可以在其中编写宏并从gdb调用)。将.gdbinit放在您的主目录中,以便每次加载gdb时都将其选中
  • info threads 列出所有活动线程,f(#) - &gt; #要切换到的#thread编号

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

    • p / d 0x10 - &gt;给出十进制等效值0x10
    • p / t 0x10 - &gt;二进制等效值0x10
    • p / x 256 - &gt;十六进制当量为256

答案 10 :(得分:2)

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

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

答案 11 :(得分:2)

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

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