4
我得到了这样的对象段错误:在gdb调试核心转储文件如何通过内存地址查找错误?
http_client_reset(struct http_client *client) {
if (client->last_req) {
/* @client should never be NULL, but weather
a valid object, I don't know */
...
}
}
的client
内存地址是0x40a651c0
。我已经尝试了好几次了,地址是一样的。
然后我试图在GDB的bt
命令:
(gdb) bt
#0 0x0804c80e in http_client_reset (
c=<error reading variable: Cannot access memory at address 0x40a651c0>,
[email protected]=<error reading variable: Cannot access memory at address 0x40a651bc>)
at http/client.c:170
Cannot access memory at address 0x40a651bc
没有回溯的消息,我已经grep
编我的源代码,而且只有一个上http_client_reset
电话。
- 如何通过只有一个内存地址调试这样的错误?
- 有没有一种方法来判断一个对象在访问其字段之前是否有效(
obj == NULL
除外)?
尝试在gdb中使用'disass'来反汇编当前函数。不,没有办法确定一个对象在“坏”值时是否有效。 –
那么,你真的只有一个锚:'在http/client.c:170'在那个地方加入额外的调试信息。 –
Valgrind是你的朋友:http://valgrind.org – alk