2013-10-22 74 views
0

在release中調試時,C++代碼不會擴展某些變量。什麼是不能擴展的變量,爲什麼這樣呢?我可以理解,發佈dll已經打包了額外的優化,但不太確定這是否是唯一的原因。此外還有什麼可以做,以查看這些值爲什麼在發佈模式下調試隱藏信息?

+2

是的,這幾乎是唯一的原因。 –

+2

使用日誌記錄查看這些變量 – Andrey

+1

在visual studio中。我有時會修改RelWithDebugInfo配置,無需進行任何優化。這種方式調試更容易,我有釋放堆。儘管這隻對我關閉優化的代碼有所幫助。 – drescherjm

回答

2

即使假設你已經在構建調試信息,調試發佈版本(優化),一般是很難的。優化器可以將代碼的結果翻譯到您可能無法識別的地方。

它將完全刪除變量,並且隱藏它們來自調試器(因爲變量不在那裏,調試器不能顯示它們)。它可能不會刪除它,但暫時重新使用註冊溢出空間,您將看到變量跳到某個隨機值的內存值。該流程也可以重新排序和變量可能,並有正確的價值初始化一次,但初始化可能被進一步推下來,尚未執行...

如果你能重現問題的調試版本,我會從那裏開始。如果沒有,祝你好運。不要相信你看到的任何東西,而是儘可能從你可用的數據點中提取儘可能多的信息。

1

當您在「調試」模式打造,那麼編譯器(和鏈接)增加了這樣的事情變量,他們的名字,使用的源文件,行號的額外信息信息等。在「釋放」模式下編譯時缺少這些信息。它可以通過在項目設置中更改來添加。

+5

優化器可能決定不爲某些變量分配內存,因此即使存在調試信息時它們也是不可見的 – Andrey

相關問題