0

我有一个大型项目,在不调试时(即使在运行调试版本时)也可以毫无问题地执行。

如果我尝试调试项目,当执行遇到某个 MS CCR 依赖库时,调试器会暂停执行:

源码拆解

此时的调用堆栈如下所示:

堆栈跟踪

即使“调试”->“异常...”->“CLR 异常”抛出 用户未处理都未选中,也会发生这种情况。

自从我将项目升级到 .net4.5 并添加了最新版本的(4.0.261.0)后,问题似乎就发生了Microsoft.Core.Ccr.dllMicrosoft.Ccr.Core.TaskExecutionWorker.ExecuteTaskHelper(Microsoft.Ccr.Core.ITask currentTask) + 0x94 bytesMicrosoft.Ccr.Core

这给我的调试工作带来了很大的不便,因为遇到这些不存在的断点意味着我的项目的其他与时间相关的部分几乎不可能正确调试。

什么可能导致这种行为,是否有任何我错过的选项可能允许 VS 忽略该问题?

4

1 回答 1

0

在对dotPeek 进行反编译后,TaskExecutionWorker.ExecuteTaskHelper我看到以下内容:

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

我可以看到他们为什么这样做(我在某处有未处理的异常),但现在它们已被 CCR 吞噬,而我在调试器中看到的信息使这个代码定义的断点变得毫无意义。

编辑

看来我已经BreakOnReceive = true在 Dispatcher 中添加了带有属性的因果关系。因此,这是预期的行为。我看不出此设置有任何可能的用途,因为异常已被吞噬。当然,这里更好的决定是抛出异常而不是破坏调试器。嗯……

于 2012-06-13T12:13:07.847 回答