Valgrind:禁用条件跳转(或整个库)检查

问题描述 投票:6回答:4

我正在使用OpenSSL API开发应用程序。众所周知,OpenSSL使用大量全局变量,Valgrind将其视为错误(“条件跳转或移动...”等)。因此,Valgrind的输出被共享库中的错误所阻塞。这对于调试目的非常不方便,因为每次我得到:

已检测到

超过X个错误。我不再报告了。最终错误计数将不准确。去修复你的程序!

问题是:

  1. 我可以在Valgrind中禁用方库(在我的情况下为-lssl-lcrypto)内存检查吗?
  2. 或者我可以只关注“绝对丢失”的错误吗?

    谢谢。

c linux memory-leaks openssl valgrind
4个回答
3
投票

Valgrind可以配置为抑制库中的错误。

关于此的详细信息,请点击这里:http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress

来自上面链接的网页:

注意:到目前为止,添加抑制的最简单方法是使用“核心命令行选项”中介绍的--gen-suppressions = yes选项。这将自动生成抑制。但是,为了获得最佳结果,您可能需要手动编辑--gen-suppressions = yes的输出,在这种情况下,建议通读本节。


11
投票

添加选项

--undef-value-errors=no 

为我工作(隐藏所有“有条件的跳跃或移动取决于未初始化的值”)。

有关更多信息,请参见Valgrind的man page


1
投票

[请注意,如果您禁用/抑制OpenSSL中的所有检查,也可能会禁用由自己的错误代码生成的警告。例如,当您将未完全初始化的结构传递给OpenSSL函数时,这也可能导致“条件跳转或移动...”错误,并且您可能希望看到这些错误。


1
投票

您需要使用PURIFY标志(在CFLAGS中为-DPURIFY)编译OpenSSL,以消除错误。不要在最终应用程序中使用以这种方式编译的版本,仅用于调试目的,因为它会减少在各个地方使用的熵。

例如,使用:以调试模式编译OpenSSL:

./config -d no-static shared zlib -Wa,--noexecstack -DPURIFY -O0 -ggdb3
© www.soinside.com 2019 - 2024. All rights reserved.