簡體   English   中英

Visual Studio - 調試與發布

[英]Visual Studio - Debug vs Release

我在VS 2008中構建了一個針對.NET 2.0的Windows服務。我將其作為控制台應用程序運行以進行調試。

控制台應用程序運行良好。 我把它作為服務放在我的本地計算機上,在調試模式下編譯,仍然很好用。 我已准備好立即發布,突然,當我將其設置為發布模式時,服務會編譯並安裝,但沒有任何反應。 (根本沒有運行中的代碼)。

我意識到發布與調試模式是屬性配置設置,但似乎在發布模式下,即使我檢查定義DEBUG常量,取消選中Optimize代碼,並將Debug info設置為'full',它仍然無效。

將它設置回調試,它再次像魅力一樣工作。

(作為旁注,我嘗試將目標框架重置為3.5,以確保不是問題)

所以我的問題(按重要性排序)是這些:

  1. 將以任何方式使用我的“調試”版本會導致任何問題嗎?

  2. 除了我已經嘗試改變的三個設置之外,調試和發布之間的設置有何不同?

  3. 這對我來說似乎是一個奇怪的錯誤,並激起了我的好奇心。 知道是什么會導致這個嗎?

編輯:應該提一下,我已經在使用自定義安裝程序。 基本上我編譯程序(在調試或發布中),然后使用相應的安裝程序安裝它。

1)它可能,如果不是直接的,間接地通過使應用程序更慢並使其使用更多的內存。

2)當它在調試模式下運行時,某些東西的工作方式不同,例如:

  • 代碼使用一些額外的NOP指令進行編譯,因此在每個代碼行的開頭至少有一條指令,這樣就可以在任何一行放置一個斷點。

  • 指令可以在發布模式下重新排列,但不能在調試模式下重新排列,因此代碼可以單步執行,結果將對應於源代碼的確切順序。

  • 垃圾收集器的工作方式不同,它允許引用在整個范圍內存活,而不是僅在它們被使用的時候存活,這樣變量可以在調試模式下查看,而不會在范圍結束之前消失。

  • 異常包含更多信息,並且在拋出時需要花費更長的時間來處理。

所有這些差異都相對較小,但它們是實際差異,在某些情況下它們可能很重要。

如果您發現調試模式和發布模式之間的性能差異很大,通常是因為代碼存在問題,例如,如果它拋出並捕獲大量異常。 如果代碼中存在競爭條件,則可能僅在發布模式下發生,因為調試模式中存在一些額外開銷會導致代碼運行稍慢。

3)至於你的服務有什么問題,我不知道,但它似乎與在調試模式或發布模式下如何執行代碼無關。 代碼將在任何情況下啟動,如果它是代碼的問題,它將崩潰,您將能夠在事件日志中看到它。

我不確定我能說#1還是#2,但是當我遇到這樣的問題時,那是因為線程/並發不正確 我不確定你的應用程序有多大,但這可能是一個很好的起點。

暫無
暫無

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

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