gpt4 book ai didi

valgrind - valgrind 无法检测到什么样的错误?

转载 作者:行者123 更新时间:2023-12-02 05:24:17 32 4
gpt4 key购买 nike

我有一个因 SIGSEGV 而崩溃的应用程序。

--20183-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--20183-- si_code=80; Faulting address: 0x0; sp: 0x409a8de60

valgrind: the 'impossible' happened:
Killed by fatal signal
==20183== at 0x38039981: vgPlain_arena_free (m_mallocfree.c:245)
==20183== by 0x38001E84: die_and_free_mem (mc_malloc_wrappers.c:124)
==20183== by 0x380688C3: vgPlain_scheduler (scheduler.c:1402)
==20183== by 0x380913F4: run_a_thread_NORETURN (syswrap-linux.c:95)

它一定是某种内存损坏,弄乱了 malloc 链,因为崩溃发生在随机位置 - 但总是在释放时发生。

通常您会看到如下消息:

Invalid write of size 8

这表明我破坏了内存的地方,但是没有任何消息,只是立即崩溃。 AFAIK valgrind 涵盖了大部分系统调用,因此它甚至会报告与这些调用相关的问题,所以...

我的理论(*)问题是:我应该寻找什么样的错误? valgrind 无法检测到什么样的无效写入?

(*):请不要问实际代码,正如我所说,这是一个理论问题。

附带问题:有没有其他工具可以解决这个问题?

最佳答案

只检查堆上的分配,不检查全局/堆栈变量。

缓冲区溢出 如果它们最终访问有效内存(另一个分配的 block )则不会被捕获。对于以下示例,valgrind 不会报告溢出(当然这完全取决于您使用的内存分配器...):

int main() {
char* a = malloc(1024);
char* b = malloc(1024);
*(a+1600) = '!';
}

在我的例子中,valgrind 的 ptrcheck 工具 (--tool=exp-ptrcheck) 发现了问题。

关于valgrind - valgrind 无法检测到什么样的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364954/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com