簡體   English   中英

Visual C ++ 2008“發布”版本包含調試信息

[英]Visual C++ 2008 'Release' build contains debug information

我注意到在使用MS Visual Studio 2008生成新的C ++項目時, Release版本包含調試符號 - 特別是啟用了以下設置:

  • C ++ / General / Debug信息格式設置為Program Database
  • 鏈接器/調試/生成調試信息設置設置為

我在Visual Studio的早期版本中從未注意到這一點。

因此,除了生成更大的EXE文件之外,啟用這些設置是否有任何缺點?

我們已經在我們的商業版本中打開了這些設置多年,沒有明顯的缺點。 不過,好處是巨大的。

我們已經集成了一個崩潰轉儲打包程序,它將轉儲與其他一些信息打包在一起並通過電子郵件(經用戶同意)發送到公司收件箱。 這有助於我們找到可能讓我們永遠重現並找到其他問題的問題。

雖然它略顯偏離主題,但這里有一個鏈接,可以幫助您輕松地將崩潰記者包含在C ++ / Windows應用程序中: http//www.codeproject.com/KB/debug/crash_report.aspx

注意:但是,在您的版本中不包含PDB文件是明智的。 也就是說,您必須保留與發布版本匹配的PDB文件,以便將來可以正確調試問題。 如果使用的PDB文件不是使用構建exe的相同代碼構建的,那么當您嘗試調試dmp時看到的堆棧將是錯誤的。

它們默認打開,因為:

  1. 如果您現在不創建它們,則無法在以后創建它們。
  2. 你需要它們。

在Visual C ++中啟用調試信息會導致將小條目添加到二進制標頭,以標識此二進制文件的PDB。 它太小而不適合任何尺寸,並且不包含任何您可能擔心共享的有用秘密。

(標題條目標記為RSDS:誰可以猜到為什么?)

當然,這些PDB將在構建計算機/備份中使用更多磁盤空間。 處理它。 在需要調試時需要那些PDB。

好吧,您可能會提供此調試信息,有人可能會使用它來反匯編您的代碼。 對於一些可怕的人來說,這可能是一個不以這種方式離開的理由。

就個人而言,我認為有時為發布版本提供調試信息是有幫助的 - 這樣就可以更容易地分析故障轉儲,這將由Dr. Watson在應用程序崩潰時存儲。
我確實發現了一些非常模糊的錯誤。

擁有這些選項並不一定會使您的可執行文件更大。 調試信息存儲在單獨的文件中,擴展名為PDB。 提供調試信息絕不是一個壞主意,除非你真的缺少免費存儲空間。

也許這就是為什么它們默認處於啟用狀態:它們不會損害您的可執行文件。 發布版本確實使用優化,例如函數內聯和生成優化代碼,這使得更難以逐步完成,而Debug版本則關閉了這些選項。

這里沒有缺點。

戴夫

添加/ Zi開關除了PDB之外還會生成更大的.exe文件。 但是,您可以單獨鏈接/ OPT:REF以使.exe文件大小保持最小。

由於對.pdb文件的引用(即額外路徑),.exe將略大。 就是這樣。

暫無
暫無

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

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