防止Valgrind检查共享库

时间:2012-11-28 19:56:27

标签: memory shared-libraries valgrind

首先,我知道存在virtually the same title的另一个问题,但这个问题的答案在这里没用。 Another question接近,但解决方案不再是我可以在这里使用的解决方案。

我的应用程序使用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对应用程序调用的共享库进行操作?不抑制输出,但实际上没有下降到它。如果没有,是否有可以阻止的内存检查程序?

1 个答案:

答案 0 :(得分:3)

首先,您应首先报告此问题 - 有关如何在valgrind web site处执行此操作的信息。

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

要回答你的直接问题,没有办法做你想做的事,因为它没有任何意义 - 除非valgrind能够看到你的程序所做的所有读写操作都无法跟踪内存状态正常,无法检测正在监视的程序部分中的错误。你会得到误报和漏报。