作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在这样的对象中遇到段错误:
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
)?最佳答案
coredump 崩溃调试从来都不是“非黑即白”的事情。因此,您将无法获得有关调试 coredump 的问题的准确答案。然而,大多数 coredump 将归因于编程错误,这些错误可以分为广泛的领域。我将提供其中一些广泛的领域和一些调试机制——这可能会对您有所帮助。
导致崩溃的编程错误类
CRUD
- 创建/读取/更新和删除。 挖掘核心转储根本原因的方法
您需要了解 - 从技术上讲,coredump 是一种非法操作,会导致未处理的异常导致崩溃。由于其中大部分与内存处理有关,静态分析工具(如 kloc/PCLint
)将捕获几乎 80% 的问题。然后我接下来会在 valgrind/purify
上运行,很可能会发现其余的问题。很少有问题会同时遗漏这两个问题 - 这将是一些与排序/时序相关的代码 - 可以通过 code review
找到。
喂!
关于c - 如何仅通过内存地址定位bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18184472/
我是一名优秀的程序员,十分优秀!