我正在开发使用OpenSSL API的应用程序。 众所周知,OpenSSL使用由Valgrind作为错误(“条件跳转或移动…”等)的全局variables的miriades。 这样Valgrind的输出就会被共享库的错误所阻塞。 这对debugging非常不方便,因为每当我得到:
超过X总检测到的错误。 我不再报告。 最终的错误数量是不准确的。 去解决你的程序!
问题是:
或者我可以只专注于“明确丢失”的错误?
谢谢。
Valgrind可以配置为抑制库中的错误。
有关详情,请参阅此处: http : //valgrind.org/docs/manual/manual-core.html#manual-core.suppress
从上面链接的网页:
注意:到目前为止,添加抑制的最简单方法是使用Core命令行选项中描述的–gen-suppressions = yes选项。 这会自动产生抑制。 但是,为获得最佳效果,您可能需要手动编辑–gen-suppressions = yes的输出,在这种情况下,最好阅读本节。
添加选项
--undef-value-errors=no
适用于我(隐藏所有“条件跳转或移动取决于未初始化的值”)。
欲了解更多信息,请参阅Valgrind的手册页 。
请注意,如果禁用/禁止OpenSSL中的所有检查,则也可以禁用由自己错误代码生成的警告。 例如,当您将不完全初始化的结构传递给OpenSSL函数时,这也可能导致“条件跳转或移动…”错误,您可能希望看到这些错误。
你需要用PURIFY标志(CFLAGS中的-DPURIFY)来编译OpenSSL来摆脱错误。 不要在最终的应用程序中使用这种方式编译的版本,只是为了调试目的,因为它减少了各地使用的熵。
例如,在调试模式下编译OpenSSL:
./config -d no-static shared zlib -Wa,--noexecstack -DPURIFY -O0 -ggdb3