Valgrind标志,调试与发布编译

时间:2018-05-17 08:05:40

标签: c++ build cmake valgrind

在Jenkins实例上,我需要Valgrind来检查C ++编译二进制文件中是否存在特殊问题。但是,我只需要一个是/否答案,而不是一个堆栈跟踪。如果它们有任何问题,我将在我的个人计算机上激活调试标志的故障代码上启动valgrind。在Linux运行的计算机上使用CMake管理构建(以gcc为目标)。

如果我在Jenkins实例上使用-DCMAKE_BUILD_TYPE=Release编译我的代码,Valgrind会检测二进制文件中与-DCMAKE_BUILD_TYPE=Debug一样的问题吗?

1 个答案:

答案 0 :(得分:0)

Valgrind通过在运行时检测和替换部分代码来工作,例如将调用重定向到内存分配函数。为此,它不依赖于调试信息,但可能会被优化的代码混淆:

  

如果您打算使用Memcheck:在极少数情况下,编译器   已观察到优化(在-O2及以上,有时为-O1)   生成代码,让Memcheck陷入错误的报道   未初始化的值错误,或缺少未初始化的值错误。我们   我已经仔细研究了这个,不幸的是结果   是这样做会使事情进一步显着放缓   已经是一个缓慢的工具因此,最好的解决方案是关闭优化   共。   (来自Valgrind manual

由于Release构建类型使用了优化,因此不适合您的情况。