我在这样的对象中遇到了段错误:
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 */
...
}
}
通过调试 GDB 中的核心转储文件,其内存地址client
为0x40a651c0
. 我试了好几次,地址都是一样的。
然后我在 GDB 中尝试了bt
命令:
(gdb) bt
#0 0x0804c80e in http_client_reset (
c=<error reading variable: Cannot access memory at address 0x40a651c0>,
c@entry=<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
)之前判断对象是否有效?