2010-03-03 40 views
49

我想在C#中部署我的應用程序的發行版本。C#發行版仍然有.pdb文件

當我使用Release配置構建時,仍然可以看到生成了.pdb文件,這意味着我的應用程序仍可以調試。這也意味着某些調試信息存在於我的代碼中,使其稍微放慢一點。

如果這是真的,我怎樣才能完全禁止在二進制文件中產生的任何調試信息?你是否也知道發佈.pdb的原因? Release配置已檢查Optimize code,並且只定義了TRACE常數,而不是DEBUG

謝謝您的協助。

+1

@meagar即使您不希望將.pdb文件打包到MSI的最終安裝程序中發送給客戶,也應該將.pdb文件保存爲發佈模式以備將來參考。如果以未處理的方式爆發,導致您的應用程序在生產環境中崩潰,則Pdb文件將成爲您唯一的希望之光。使用Windows SDK附帶的winDbg工具調試崩潰轉儲文件非常有用。正如你已經正確提到的那樣,OPTIMIZED代碼標誌應該保持被檢查。 – RBT

+2

@RasikBihariTiwari我不在乎。我沒有問這個問題。 – meagar

+0

對不起@meagar!我應該已經解決了阿布魯佐復地。抱歉給你帶來不便。早上6點,看起來我仍然昏昏欲睡;) – RBT

回答

79

如果要禁用PDB文件生成,你需要點擊"Advanced..."按鈕」坐落在Build標籤的後下部用在項目屬性可用"Advanced build settings"對話框。

設置Output - Debug info:None發佈建立配置並且不會生成pdb文件

6

使編譯器生成.pdb文件與優化代碼並不相互排斥。

欲瞭解更多信息,請閱讀這些blogentries

+0

是的,但是在彙編中嵌入調試信息也會對性能產生影響(根據微軟的說法) – Justin

40

默認情況下,也會爲發佈版本生成PDB,這是一項功能,您不應該將其禁用,生成PDB意味着您可以在調試時獲得更多信息。代碼的執行不受PDB文件的存在的任何影響。

+0

嗨,Brian!謝謝!我對此持懷疑態度,但似乎每個人都同意這一點! –

+0

那麼大家都同意PDB文件不會降低性能?有沒有人跑過任何測試來確認? – theJerm

+0

@theJerm應用程序在運行時不讀取PDB。因此,除非你正在調試,否則除了佔用的磁盤空間之外,沒有開銷。 –

12

您不需要隨發佈部署一起發佈.PDB,但它們對於保持身邊用處很有用 - 例如,您可以使用計算機上的PDB遠程調試在另一臺計算機上運行的代碼,以獲取該行出現異常的地方。

沒有使用.PDBs,行號和文件名不包含在堆棧跟蹤中,因此它使調試起來更加困難。

+0

謝謝!這很有用!我沒有意識到行號在每個異常對象的StackTrace中都不存在! –

13

您可以在Build - > Advanced ... - > Debug info:下的項目屬性中控制pdb/symbol的生成。選項有:

  • (無符號信息)
  • 滿(一個.PDB將被產生,並且一些符號信息被嵌入在組件)
  • PDB只 (將生成.pdb,但組件不受影響)

有關更多信息,請參見http://msdn.microsoft.com/en-us/library/8cw0bt21%28VS.80%29.aspx

強烈建議您選擇的唯一PDB選項,的沒有選擇,因爲它仍然給你一些符號信息,不影響大會 - 你可能會發現,這是當前的設置,您有您的版本建立。