wjt*_*wjt 3 linux debugging gdb
我正在调试基于GObject的应用程序中的引用泄漏.GObject有一个简单的内置机制来帮助解决这些问题:你可以将g_trap_object_refgobject.c中的变量设置为你关心的对象,然后该对象的每个ref或unref都会遇到一个断点指令(via G_BREAKPOINT()).
所以肯定的是,程序确实停止了,gdb报告:
Program received signal SIGTRAP, Trace/breakpoint trap.
g_object_ref (_object=0x65f090) at gobject.c:2606
2606 old_val = g_atomic_int_exchange_and_add ((int *)&object->ref_count, 1);
(gdb) _
Run Code Online (Sandbox Code Playgroud)
这是一个很好的开始.现在,通常我会编写一些命令来在我手动设置的断点处运行commands 3(比如断点3).但相当于SIGTRAP,即handle SIGTRAP不能让我选择做任何特别有趣的事情.有没有办法做到这一点?
(我知道还有其他方法来调试引用泄漏,例如在对象的ref_count字段上设置观察点,refdbg,脚本定期断点g_object_ref()和g_object_unref().我现在要尝试那些.我正在寻找一个脚本响应的方法SIGTRAP.它可能在其他情况下也很有用,如果gdb不支持这个,我会感到惊讶.)
您想显示一些值并继续执行该程序吗?在这种情况下,只需定义一个显示您感兴趣的值的宏,继续执行并递归调用自身:
define c
echo do stuff\n
continue
c
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |