首先,我知道存在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对应用程序调用的共享库进行操作?不抑制输出,但实际上没有下降到它。如果没有,是否有可以阻止的内存检查程序?
答案 0 :(得分:3)
首先,您应首先报告此问题 - 有关如何在valgrind web site处执行此操作的信息。
你所看到的表明,valgrind的JIT正在生成一条在你的机器上无效的指令,这实际上应该不会发生。
要回答你的直接问题,没有办法做你想做的事,因为它没有任何意义 - 除非valgrind能够看到你的程序所做的所有读写操作都无法跟踪内存状态正常,无法检测正在监视的程序部分中的错误。你会得到误报和漏报。