【发布时间】:2010-12-01 01:41:00
【问题描述】:
您能否在运行 gdb 或 dbx 等调试器时发布您最棘手和最有用的命令。
【问题讨论】:
您能否在运行 gdb 或 dbx 等调试器时发布您最棘手和最有用的命令。
【问题讨论】:
从 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.
【讨论】:
在启动 gdb 时使用 -command=<file with gdb commands> 选项。与-x <command file> 相同。此命令文件可以包含 gdb 命令,如断点、选项等。在需要使用 gdb 进行连续调试运行的特定可执行文件的情况下很有用。
【讨论】:
-iex 选项在 gdb 命令行上添加单个命令。
【讨论】:
info locals -- 查看所有局部变量;列表——查看源代码; rbreak -- 在函数匹配正则表达式时中断。
set print object on 用于多态元素,set print elements 0 是我经常使用的两个命令。很有用。
t a a bt(意思是thread apply all backtrace)。可以与(几乎)所有其他命令一起使用。与bt full 一起使用特别有用。
不要使用 -tui 选项启动 gdb 以查看包含突出显示程序中正在执行的代码行的屏幕的子进程,而是使用 C-x o 和 C-x a 跳入和跳出此功能。如果您正在使用该功能以及暂时不使用它的内容,这很有用,因此您可以使用向上箭头获取上一个命令。
【讨论】:
focus cmd 将焦点更改到命令窗口,以便向上/向下箭头起作用。你使用focus src切换回来。
要调试 STL,请将内容添加到 .gdbinit,请按照以下说明操作:
【讨论】:
thread apply all bt 或thread apply all print $pc:用于快速找出所有线程在做什么。
【讨论】:
这可能很有用,但我相信它可以改进,欢迎帮助:
define mallocinfo
set $__f = fopen("/dev/tty", "w")
call malloc_info(0, $__f)
call fclose($__f)
【讨论】:
info threads列出所有活动线程,f(#) -> #你想切换到的线程号
有时我使用 gdb 将十六进制转换为十进制或二进制,它非常方便,而不是打开计算器
【讨论】:
脚本 gdb 是一个很好的技巧,除了我喜欢 设置调度程序锁定开/关,以防止在您介入时运行其他线程。
【讨论】:
set scheduler-locking on 在 gdb 中
使用文本用户界面启动 gdb
gdb -tui
【讨论】:
例如stl-views.gdb中定义的宏
【讨论】: