簡體   English   中英

Valgrind標志,調試與發布編譯

[英]Valgrind flags, debug vs release compilation

在Jenkins實例上,我需要Valgrind檢查C ++編譯二進制文件中是否存在特定問題。 但是,我只需要是/否答案,例如不需要堆棧跟蹤。 如果有任何問題,我將在錯誤代碼上啟動valgrind,並在個人計算機上激活調試標志。 在Linux正在運行的計算機上(以gcc為目標)使用CMake來管理構建。

如果在Jenkins實例上使用-DCMAKE_BUILD_TYPE=Release編譯我的代碼,Valgrind是否會在二進制文件中檢測到與-DCMAKE_BUILD_TYPE=Debug相同的問題?

Valgrind的工作原理是在運行時檢測和替換部分代碼,例如將調用重定向到內存分配函數。 為此,它不依賴調試信息,但是優化代碼可能會混淆它:

如果您打算使用Memcheck:在極少數情況下,觀察到編譯器優化(在-O2及以上,有時是-O1)會生成代碼,這些代碼會使Memcheck誤報未初始化的值錯誤,或者丟失了未初始化的值錯誤。 我們已經詳細研究了解決此問題的方法,不幸的是,這樣做的結果是,原本已經很慢的工具將大大降低速度。 因此,最好的解決方案是完全關閉優化。 (摘自《 Valgrind》手冊

由於Release構建類型是使用優化的,因此使其不適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM