2010-09-15 39 views
6

我想知道決定部署一個在Debug中創建的應用程序(帶有調試符號表)的反面優點和缺點,而反對釋放符號被剝離的發佈模式。還有其他一些排列方式,例如打開調試的優化和打開Release的調試符號。部署應用程序的Debug版本的含義?

,我認爲可以是關注的領域是(你可能知道其他人):

  • 安全
  • 性能
  • 穩定性

但我是不是專家,所以我不確定部署調試應用程序對這些區域的影響。

它可能不相關,但該應用程序是一個C#.Net框架3.5(管理terrabytes數據的業務應用程序)爲有關的人。這是(付費)客戶的申請。

選擇這樣做有沒有明顯的優缺點?

+0

希望這本蘇格蘭博客能回答您的問題! http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx這是ASP.NET應用程序。其中大多數對於其他項目類型也是如此。 – Josh 2010-09-15 07:06:50

回答

3

安全性:調試和發佈像C#這樣的託管代碼在未被模糊處理時已經很容易受到攻擊。使用模糊處理保護您的代碼,否則可能會輕易地複製,盜取,加密等任何安全性破解(在本例中,客戶提到的是Terrabytes數據)。我已經回答了obfuscation question here。另外,製作一個密鑰文件並簽署你的程序集。

性能:調試速度慢,不應釋放調試版本。如果使用AJAX會使每個頁面請求的重量更大,因爲調試版本更大。設置調試標誌爲false你的應用程序配置文件,我在這個other question包括了幾個類似的提醒。

穩定性:調試使用更多內存,並且如果服務器內存不足,可能會不太穩定。具有調試DLL的優點是,如果應用程序失敗,您的pdb文件已經就位。最佳做法是將調試版本保持在您構建的每個發行版本的安全位置。如果客戶要求您進行調試,請備份他的文件夾並將其替換爲相應的調試程序集。

我開發了一種歸檔產品,該歸檔產品也存檔Terrabytes數據,並且我不推薦部署調試版本並確保它已被模糊化,並且使用Dotfuscator加密文件加密方法。

+1

+1使用Reflector等,如果它沒有被模糊處理,無論它是調試還是釋放都很不相關。就像System.Reflection一樣,「private」只是一個建議。 – 2010-09-15 02:35:52

+0

我喜歡你的想法,建立調試和發佈,然後在必要時進行替換+1 – 2010-09-15 02:45:49

+0

調試不僅速度慢,而且......不同。如果你的代碼依賴於優化,它將只是簡單的中斷。一個很好的例子(而不是推薦!)將檢查調用棧並期望調用者不被內聯。 – 2010-09-15 13:17:06

1

你也可以給他們一個帶有調試信息的發佈版本。

+0

我知道我可以做到這一點。可以擴展更多的原因或不這樣做 – 2010-09-15 02:21:26

+0

代碼運行優化,所以你不會引入性能問題。但是你仍然可以獲得一些好處,比如更詳細的堆棧跟蹤。 – 2010-09-15 02:24:23

+0

好的,但在你的回答中談論它。 – 2010-09-15 02:27:29

相關問題