簡體   English   中英

為什么在發布模式下進行調試會隱藏信息?

[英]Why is it that debugging in release mode hides information?

在發行版中進行調試時,C ++代碼不會擴展某些變量。 不能擴展的變量是什么類型,為什么呢? 我可以理解,發行版dll已打包了額外的優化功能,但並不確定這是否是唯一原因。 還有什么可以做的來查看這些值

即使假設您在構建中具有調試信息,調試發布版本(優化)也很困難。 優化器可以將代碼的結果處理到您可能無法識別的程度。

它將完全刪除變量並將其對調試器隱藏 (由於變量不存在,因此調試器無法顯示它們)。 它可能不會刪除它,但會暫時重新使用該空間以防止寄存器溢出,並且您會看到內存值,您的變量正在躍遷到某個隨機值。 初始化后 ,流程可能會重新排序,變量可能是且具有正確的值,但初始化可能已被進一步推低,尚未執行...

如果您可以在調試版本中重現該問題,那么我將從此處開始。 如果沒有,祝你好運。 不要相信您看到的任何內容,而是嘗試從可用的數據點中提取盡可能多的信息。

在“調試”模式下進行構建時,編譯器(和鏈接器)會添加有關變量,它們的名稱,所使用的源文件,行號信息等內容的額外信息。在“發布”模式下進行編譯時會丟失此信息。 它雖然可以增加,通過在項目設置中更改它。

暫無
暫無

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

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