人们使用gdb开启和关闭进行调试, 当然还有很多其他的调试工具 各种操作系统with and without GUI and, maybe other fancy IDE features。
我想知道 what useful gdb scripts you have written and liked
虽然,我并不是指在something.gdb
文件中转储一些命令,而这些命令是您提供的,以便提取大量数据,如果这样做了,请继续讨论它。
让我以一个简单的案例为例...... 说,
在条目上串行遍历的脚本
在大型哈希表中查找错误条目
这是在嵌入式平台上实现的。
这帮我调试了一次破坏的哈希表。
答案 0 :(得分:10)
这个脚本不是我写的,它可以打印STL容器,例如矢量,地图等:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
非常棒。
答案 1 :(得分:5)
调试AOLserver SIGSEGV崩溃时,我使用以下脚本检查GDB中的TCL级调用堆栈:
define tcl_stack_dump
set $interp = *(Interp*)interp
set $frame = $interp->framePtr
while (0 != (CallFrame *)$frame->callerPtr != 0)
set $i = 0
if 0 != $frame->objv
while ($i < $frame->objc)
if (0 != $frame->objv[$i] && 0 != $frame->objv[$i]->bytes)
printf " %s", (char *)(CallFrame *)$frame->objv[$i]->bytes
end
set $i = $i + 1
end
printf "\n"
end
set $frame = (CallFrame *)$frame->callerPtr
end
end
document tcl_stack_dump
Print a list of TCL procs and arguments currently being called in an
interpreter. Most TCL C API functions beginning with Tcl[^_] will have a
Tcl_Interp parameter. Assumes the `interp' local C variable holds a
Tcl_Interp which is represented internally as an Interp struct.
See:
ptype Interp
ptype CallFrame
ptype Proc
ptype Command
ptype Namespace
ptype Tcl_Obj
end
答案 2 :(得分:3)
1。当试图让一些第三方闭源DLL在Mono下使用我们的项目时,它会产生毫无意义的错误。因此,我使用了Mono project。
中的脚本2. 我还有一个项目可以将自己的信息转储到 stdout 以便在GDB中使用,所以在断点处,我可以运行该函数,然后剪切-n-将其输出粘贴到GDB中。
[编辑]
3。我的大多数GCC / G ++使用已经有一段时间了,但我还记得使用宏来利用GDB知道我所拥有的一些不透明数据的成员这一事实(库是用debug编译的。这非常有帮助。
4。我也发现了这一点。它转储一个对象列表(来自全局“headMeterFix”SLL),其中包含另一个对象类型的动态数组。我在宏中使用嵌套循环的次数之一:
define showFixes
set $i= headMeterFix
set $n = 0
while ($i != 0)
set $p = $i->resolved_list
set $x = $i->resolved_cnt
set $j = 0
printf "%08x [%d] = {", $i, $x
printf "%3d [%3d] %08x->%08x (D/R): %3d/%-3d - %3d/%-3d {", $n, $i, $x, $i->fix, $i->depend_cnt, dynArySizeDepList($i->depend_list), $i->resolved_cnt, dynArySizeDepList($i->resolved_list)
while ($j < $x)
printf " %08x", $p[$j]
set $j=$j+1
end
printf " }\n"
set $i = $i->next
set $n = $n+1
end
end