2012-06-13 103 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给调度。因此,这是预期的行为。我看不到任何可能的用途,因为例外已经被吞噬了。当然,更好的决定是抛出异常而不是破坏调试器。嗯...