【问题标题】:Prevent Valgrind from checking shared libraries防止 Valgrind 检查共享库
【发布时间】:2012-11-28 19:56:27
【问题描述】:

首先,我知道存在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 对应用程序调用的共享库进行操作?不压制输出,但实际上不下降。如果没有,是否有可以防止的内存检查器?

【问题讨论】:

    标签: memory shared-libraries valgrind


    【解决方案1】:

    首先你应该报告这个问题 - valgrind web site 有关于如何做到这一点的信息。

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

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

    【讨论】:

    • 好点,当帮助解决问题的工具导致其他问题时总是令人沮丧。或者当使用调试编译器标志运行无法重现发布标志时出现的问题:(
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2019-01-22
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多