我有一个大型项目,在不调试时(即使在运行调试版本时)也没有问题。
如果我尝试调试项目,当执行命中某个MS CCR依赖库时,调试器会暂停执行:
此时的调用堆栈如下所示:
即使“调试” - >“例外情况......” - >“CLR异常”抛出 和 用户未处理都未经检查。
由于我将项目升级到.net4.5并添加了最新版本的Microsoft.Core.Ccr.dll
(4.0.261.0),问题似乎发生在Microsoft.Ccr.Core.TaskExecutionWorker.ExecuteTaskHelper(Microsoft.Ccr.Core.ITask currentTask) + 0x94 bytes
Microsoft.Ccr.Core
{/ 1}}。
这对我的调试工作来说是一个很大的不便,因为遇到这些不存在的断点意味着我的项目中其他与时间相关的部分几乎无法正确调试。
有什么可能导致这种行为,是否有任何我错过的选项可能会让VS忽略这个问题?
答案 0 :(得分:0)
TaskExecutionWorker.ExecuteTaskHelper
if (!CausalityThreadContext.IsEmpty(threadCausalities) &&
CausalityThreadContext.RequiresDebugBreak(threadCausalities))
Debugger.Break();
反编译后,我看到以下内容:
BreakOnReceive = true
我可以看到他们为什么会这样做(我在某处有未处理的异常)但现在他们已经被CCR吞噬了,我在调试器中看到的信息使得这个代码定义的断点有点无意义。
修改
似乎我已将属性{{1}}的Causalities添加到Dispatcher。因此,这是预期的行为。我看不出有任何可能的用途,因为例外情况已被吞噬。当然,这里更好的决定是抛出异常而不是破坏调试器。嗯...