如何调试被覆盖的指针?

时间:2012-10-14 06:43:39

标签: c debugging gdb segmentation-fault valgrind

我遇到因覆盖带有无效值的指针而导致的错误。我无法使用valgrind(在它的默认模式下)或GDB中找到错误,因为它们只指向无效指针,而不是指向错误值的指针。

它始终是相同的变量,但是,我没有明确地将其设置为坏值。程序中的其他一些行必须是从它的边界访问内存,但偶然它会碰到该指针的存储。

我不确定应该使用哪些调试工具/选项来处理此错误。

示例崩溃:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff6ffc700 (LWP 2425)]
0x00000000004058b2 in writeToConn (conn=0x7ffff0004f40) at streamHandling.c:115
115             ssize_t result = send(conn->fd, conn->head->data->string + position, conn->head->data->size - position, 0);
(gdb) print conn
$1 = (struct connection *) 0x7ffff0004f40
(gdb) print conn->head->data
$2 = (struct dbstring *) 0x35

不幸的是,我不能简单地观察变量conn->head->data,因为我有大约5,000个结构。

此代码大部分时间都可以使用,但是如果在中等负载下运行,它会在几秒钟后崩溃。

2 个答案:

答案 0 :(得分:2)

使用Break Commands触发断点时,gdb可以自动执行命令。

您可以设置一个Break命令,以便在分配struct connection时运行,并让它在感兴趣的字段上添加一个观察点。

答案 1 :(得分:0)

堆叠回溯会有帮助吗?这是一个告诉如何操作的页面。

How can one grab a stack trace in C?