Debugging valgrind是否阻止我要调试的segfault发生?

Debugging valgrind是否阻止我要调试的segfault发生?,debugging,segmentation-fault,heap-corruption,Debugging,Segmentation Fault,Heap Corruption,我想确定是什么导致了segfault,我正在尝试使用valgrind来实现这一点 这是一个要点,当我在没有valgrind的情况下运行某个东西时,我会得到一个segfault,但当我使用valgrind时,我不会得到一个segfault。(我重复了好几次,结果都一样) 这是否意味着当我使用valgrind时,该bug是不会发生的heisenbug,因此valgrind在这里没有任何用处?在使用调试信息编译时,或者在valgrind下运行时更改内存位置时,可能隐藏分段错误。当然,这并不意味着不能使

我想确定是什么导致了segfault,我正在尝试使用valgrind来实现这一点

这是一个要点,当我在没有valgrind的情况下运行某个东西时,我会得到一个segfault,但当我使用valgrind时,我不会得到一个segfault。(我重复了好几次,结果都一样)


这是否意味着当我使用valgrind时,该bug是不会发生的heisenbug,因此valgrind在这里没有任何用处?

在使用调试信息编译时,或者在valgrind下运行时更改内存位置时,可能隐藏分段错误。当然,这并不意味着不能使用valgrind来调试应用程序。您应该修复报告中出现的所有错误,例如无效读/写错误。修复这些错误将修复分段错误问题

这是否意味着该bug是我使用时不会出现的海森堡bug valgrind,因此valgrind在这里没有任何用处

不,您仍然应该使用Valgrind并修复所有报告的错误。您描述的行为相当常见,并记录在:

当一个程序在Valgrind下运行时,它的环境稍微 与本机运行时不同。例如,内存布局是 不同,线程的调度方式也不同

大多数时候,这没有什么区别,但它可以, 特别是当你的程序有缺陷的时候。例如,如果您的程序 崩溃,因为它错误地访问了无法寻址的内存, 运行时,此内存可能不会无法寻址 在瓦尔格林的领导下。或者,如果您的程序有数据竞争,则 可能不会在Valgrind下出现


如果是竞争条件或其他多线程问题,valgrind非常缓慢的执行可能会改变结果。你使用多线程吗?