您能否在运行 gdb 或 dbx 之类的调试器时发布最棘手和最有用的命令。
12 回答
- backtrace full:使用局部变量完成回溯
- up , down , frame : 在帧间移动
- watch:满足某个条件时暂停进程
- set print pretty on:打印出格式精美的 C 源代码
- 设置登录:记录调试会话以显示给其他人以获得支持
- 设置打印数组:漂亮的数组打印
- finish : 持续到函数结束
- enable和disable:启用/禁用断点
- tbreak:中断一次,然后删除断点
- where:当前正在执行的行号
- 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 之外,您还可以在使用一段时间后通过键入“wh”切换到文本模式。
thread apply all bt
或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 将十六进制转换为十进制或二进制,它非常方便,而不是打开计算器
- p/d 0x10 -> 给出 0x10 的十进制等效值
- p/t 0x10 -> 二进制等价于 0x10
- p/x 256 -> 相当于 256 的十六进制
不要使用 -tui 选项启动 gdb 来查看包含突出显示程序中正在执行的代码行的屏幕的子进程,而是使用 Cx o 和 Cx a 跳入和跳出此功能。如果您正在使用该功能以及暂时不使用它的内容,这很有用,因此您可以使用向上箭头获取上一个命令。
这可能很有用,我相信它可以改进,欢迎帮助:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)
要调试 STL,请将内容添加到 .gdbinit,请按照以下说明操作: