簡體   English   中英

C++ 調試和發布構建配置

[英]C++ Debug and Release build configurations

目前使用 VSCode、g++、C++20、Ubuntu 20.04 Lts。

我可以將哪些編譯器標志分別用於發布版本和調試版本? 我是否關閉了調試版本的每個優化標志? 還是真的不重要? 我將不勝感激任何建議、建議或反饋,因為我自己找不到太多東西。

我是否關閉了調試版本的每個優化標志?

是的,我會說這是 go 的最佳方式,這確實很重要,具體取決於您的代碼、您對編譯器/調試器的理解以及選擇的優化級別。 調試它的體驗會有所不同,從輕微的煩人到令人沮喪和幾乎無用。 這個答案給出了 gcc 不同級別的概要, 這個問題有幾個答案更詳細地介紹了優化。

總而言之,編譯器通常可以以它認為合適的任何方式修改您的代碼,只要它仍然表現得好像您的所有語句都完全按照所寫的那樣執行。 在實踐中, -O1已經啟用了數十種技術,而-O2-O3可能幾乎不會留下任何東西,這使得查明問題變得更加困難,因為:

  • 單步執行代碼可能會以不同的順序訪問語句或完全跳過它們,這也妨礙了斷點的使用;
  • Function 調用可能會因為內聯而消失,並且不再可以從調試提示符調用;
  • 局部變量的生命周期往往比源代碼中的短,因此您不能總是查詢它們的值。

我個人使用 CMake 構建,主要使用它的兩種構建類型:

  • Debug-g ):無優化,編譯運行時assert語句;
  • RelWithDebInfo ( -O2 -g -DNDEBUG ):沒有這些斷言的快速代碼更難調試,但適用於程序正常運行后的性能分析。

暫無
暫無

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

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