我遇到因覆盖带有无效值的指针而导致的错误。我无法使用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个结构。
此代码大部分时间都可以使用,但是如果在中等负载下运行,它会在几秒钟后崩溃。
答案 0 :(得分:2)
使用Break Commands触发断点时,gdb
可以自动执行命令。
您可以设置一个Break命令,以便在分配struct connection
时运行,并让它在感兴趣的字段上添加一个观察点。
答案 1 :(得分:0)
堆叠回溯会有帮助吗?这是一个告诉如何操作的页面。