2009-09-16 76 views
6

使用視覺 工作室  2008年,根據我的心情開始調試,我要麼附加處理並按照這種方式創建斷點,要麼將System.Diagnostics.Debugger.Break()放置在代碼中的相關位置,並在其中斷時調試點。使用System.Diagnostics.Debugger.Break()通過附加到進程有什麼好處?

後者有時是我需要的!

不是在談論F5 - >在調試模式下的第二運行...

System.Diagnostics.Debugger.Break(); 

問題:

Q)我很好奇,之間的細微差別每個選項?

問)使用每種方法有什麼好處和弊端?

我將開始它關閉...

Debugger.Break()的缺點= 忘掉Debugger.Break()的,並讓他們在那裏!

Debugger.Break()好處=開始調試,準確地在你想要的位置而不會碰到其他不必要的斷點,這些斷點可能仍然存在於代碼中,如果連接到進程將會被觸發。

搶先仇敵

我就搶先仇敵,如果我使用Debugger.Break()我不理解調試的正確方式,無疑會說。

我只是試圖在這裏開始一個對話,因爲我相信根據具體情況有不同的調試方法。

回答

12

我曾經開發過一個基於插件的應用程序,它在啓動時做了很多事情。它會做很多其他事情的插件發現。我無法直接從Visual Studio運行它,所以F5不是一個選項,但是附加到調試器也不是一個選項,因爲很多時候我需要調試啓動時發生的所有事情。我永遠無法趕上附加處理。因此,我只是將Debugger.Break()設置在我想要的位置。

又如:我正在爲PowerShell編寫一個cmdlet。那些你不在Visual Studio中運行的人;您可以從PowerShell命令行運行它們。他們通常是快速的小應用程序,你不可能在附加到進程的時候趕上它們。

+3

是的,闖入啓動代碼似乎是最好的使用案例。 – 2009-09-16 11:36:29

6

除了BFree的回答,我發現Break在處理設計不佳的遺留產品時偶爾會很有用。這種產品有吞嚥或忽略例外的壞習慣,其記錄機制沒有(事實上從來沒有)正常工作。它經常違反了很多好的做法,要求客戶在運行時才能「幸運」地運行。我開始添加快速代碼:

if(System.Diagnostics.Debugger.IsAttached) 
{ 
    System.Diagnostics.Debugger.Break(); 
} 

到我專注於調試的特定點。這讓我更容易瞭解什麼時候發生了什麼,什麼被侵犯,而不會在客戶運行時破壞代碼。 (我的管道夢想是,這也希望能夠在我的一些不那麼流利的同事中找到。)

是的,我知道這不是一個特別好的做法,我絕不會在新代碼中做到這一點。但請相信我,如果您是通過該代碼庫進行深入研究的話,那麼您可能會做類似的事情。 ;)