[英]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.