4

首先,我知道存在另一个标题几乎相同的问题,但该问题的答案在这里没有用。另一个问题接近了,但同样的解决方案不是我可以在这里使用的。

我的应用程序使用了 Valgrind真正不喜欢的共享库。它生成:

Program Exception - illegal instruction
Image              PC                Routine            Line        Source             
libirc.so          000000000405ED3C  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061338E2  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061A73CE  Unknown               Unknown  Unknown
libhdf5.so.7       00000000061A9D6F  Unknown               Unknown  Unknown
libhdf5_fortran.s  0000000006B23233  Unknown               Unknown  Unknown
libhdf5_fortran.s  0000000006B19FF9  Unknown               Unknown  Unknown
les3d.x            00000000006D815C  Unknown               Unknown  Unknown

甚至在它进入我的应用程序之前就死掉了(好吧,它进入了我的应用程序,但我们要做的第一件事是调用一个例程来初始化共享库,这就是它死的地方)。在没有 Valgrind 的情况下运行不会导致非法指令,但我确实会遇到奇怪的段错误,因此需要内存检查器。所以它完全无法使用,这就是错误抑制不起作用的原因。

是否可以真正阻止 Valgrind 对应用程序调用的共享库进行操作?不压制输出,但实际上不下降。如果没有,是否有可以防止的内存检查器?

4

1 回答 1

3

首先你应该报告这个问题——在valgrind 网站上有关于如何做到这一点的信息。

您所看到的表明 valgrind 的 JIT 正在生成一条在您的机器上无效的指令,这确实不应该发生。

要回答您的直接问题,没有没有办法做您想做的事,因为它没有任何意义 - 除非 valgrind 能够看到您的程序所做的所有读写操作,否则它无法跟踪内存正确,并且无法检测到它正在监视的程序部分中的错误。你会得到假阳性和假阴性。

于 2012-11-28T21:08:12.803 回答