2012-06-13 179 views
0

我有一個大的項目,在沒有調試時(甚至在運行調試版本時)執行時沒有問題。調試會話中斷沒有斷點

如果我試圖調試項目,當執行命中一定MS CCR相關庫調試器暫停執行:

disassembly of source

出現在該點的調用堆棧如下:

stack trace

即使發生「調試」 - >「異常...」 - >「CLR異常」拋出用戶未處理的都未選中。

由於我將項目升級到.net4.5並添加了最新版本Microsoft.Ccr.Core(4.0.261.0),因此該問題似乎在Microsoft.Core.Ccr.dll處發生在Microsoft.Ccr.Core.TaskExecutionWorker.ExecuteTaskHelper(Microsoft.Ccr.Core.ITask currentTask) + 0x94 bytes處。

這對我的調試工作來說是一個很大的不便,因爲打到這些不存在的斷點意味着我項目中其他與時間有關的部分幾乎無法正確調試。

什麼可能導致這種行爲,並有沒有我錯過了可能會允許VS忽略問題的選項?

回答

0

一個dotPeek反編譯的TaskExecutionWorker.ExecuteTaskHelper後,我看到以下內容:

if (!CausalityThreadContext.IsEmpty(threadCausalities) && 
     CausalityThreadContext.RequiresDebugBreak(threadCausalities)) 
     Debugger.Break(); 

我可以看到他們爲什麼這樣做(我有地方未處理的異常),但現在他們已經通過CCR吞併和信息,我在調試器中可以看到,這個代碼定義的斷點有些沒有意義。

編輯

看來,我又增加了人員傷亡財產BreakOnReceive = true給調度。因此,這是預期的行爲。我看不到任何可能的用途,因爲例外已經被吞噬了。當然,更好的決定是拋出異常而不是破壞調試器。嗯...