簡體   English   中英

如何在發布模式下調試?

[英]How to debug in release mode?

我必須調試一個c ++項目,但由於一個依賴項無法在調試模式下編譯,到目前為止我還無法修復該問題,我想嘗試在發布模式下調試項目。

目前應用程序由於空指針而崩潰,但我沒有導致錯誤的代碼。 由於在發布模式中顯然忽略了斷點,我想知道找出錯誤的最佳方法是什么。

在VS中,右鍵單擊您的項目,選擇“屬性”。

  1. 單擊C / C ++節點。 將調試信息格式設置為C7兼容(/ Z7)或程序數據庫(/ Zi)。

  2. 展開“鏈接器”並單擊“常規”節點。 將啟用增量鏈接設置為否(/ INCREMENTAL:NO)。

  3. 選擇“調試”節點。 將生成調試信息設置為是(/ DEBUG)。

  4. 選擇“優化”節點。 將參考設置為是(/ OPT:REF)。

    if / OPT:指定了REF,/ OPT:默認情況下ICF處於打開狀態。

這是直接從微軟的文檔中刪除的:

我一直這樣做,幾乎從不在調試模式下調試。 如您所知,發布版本中發生的許多錯誤可能不會在調試版本中發生(幾乎可以肯定是調用UB引起的錯誤)。

此外,我正在研究一個使用大量圖像處理並對大圖像執行大量壓縮/解壓縮的項目。 使用慢速調試構建簡直是不切實際的。

您不能總是只更改項目設置並重新編譯。
有時您有一個要調試的已發布版本,或者客戶端發送的轉儲文件。

在使用優化的發行版中編譯C ++項目時,調試器有時不會顯示正確的對象信息。

局部變量通常是第一個去的,很多時候,這個對象的信息會丟失給調試器。

原因是編譯器使用可用的硬件寄存器來保存信息,並使用優化來避免分配局部變量。

我已經建議了一種在這里找到缺失信息的方法:

用C ++調試發布項目 - 查找丟失的對象信息

暫無
暫無

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

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