我在这样的对象中出现了段错误:
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
除外)之前,有没有办法判断对象是否有效?答案 0 :(得分:-1)
从来没有一个coredump崩溃调试是一个'黑与白'的问题。因此,你无法得到有关调试coredump的问题的确切答案。然而,大多数coredump将归因于编程错误,其可以被分类为广泛的领域。我将提供一些广泛的领域和一些调试机制 - 这可能会对你有所帮助。
导致崩溃的编程错误类
CRUD
- 创建/读取/更新和删除。 解除coredump根本原因的方法
你需要明白 - 技术上coredump是一种非法操作,导致未处理的异常导致崩溃。由于大部分内容与内存处理有关,因此静态分析工具(如kloc/PCLint
)将捕获近80%的问题。接下来我会在valgrind/purify
上运行,并且很可能会发现问题的其余部分。很少有问题错过它们 - 这可能是一些与时序相关的代码 - 可以通过code review
找到。
HTH!