我正在使用OpenSSL API开发应用程序。众所周知,OpenSSL使用大量全局变量,Valgrind将其视为错误(“条件跳转或移动...”等)。因此,Valgrind的输出被共享库中的错误所阻塞。这对于调试目的非常不方便,因为每次我得到:
已检测到超过X个错误。我不再报告了。最终错误计数将不准确。去修复你的程序!
问题是:
或者我可以只关注“绝对丢失”的错误吗?
谢谢。
Valgrind可以配置为抑制库中的错误。
关于此的详细信息,请点击这里:http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress
来自上面链接的网页:
注意:到目前为止,添加抑制的最简单方法是使用“核心命令行选项”中介绍的--gen-suppressions = yes选项。这将自动生成抑制。但是,为了获得最佳结果,您可能需要手动编辑--gen-suppressions = yes的输出,在这种情况下,建议通读本节。
[请注意,如果您禁用/抑制OpenSSL中的所有检查,也可能会禁用由自己的错误代码生成的警告。例如,当您将未完全初始化的结构传递给OpenSSL函数时,这也可能导致“条件跳转或移动...”错误,并且您可能希望看到这些错误。
您需要使用PURIFY标志(在CFLAGS中为-DPURIFY)编译OpenSSL,以消除错误。不要在最终应用程序中使用以这种方式编译的版本,仅用于调试目的,因为它会减少在各个地方使用的熵。
例如,使用:以调试模式编译OpenSSL:
./config -d no-static shared zlib -Wa,--noexecstack -DPURIFY -O0 -ggdb3