公共语言运行库无法设置断点

时间:2011-12-20 19:13:20

标签: c# .net visual-studio-2010 clr dynamics-crm-2011

这实际上是这个问题的另一部分。

Error settings breakpoints but only on some lines while debugging

我正在远程调试vs 2010中的CRM 2011插件。

我是我的一个源文件,我可以在整个代码中设置断点,除了在一些地方。

当我尝试设置断点时,我收到此错误 “无法设置以下断点:”和“公共语言运行库无法设置断点。”

protected override void ExecutePlugin()
{
    SetStateResponse response = new SetStateResponse(); // Breakpoint works

    // Message switch
    switch (_crmMessage) // Breakpoint error
    {
        case CrmPluginMessageEnum.Create:

        Entity pimage = null; // Breakpoint error
        if (_context.PostEntityImages.ContainsKey("postcreate")) // Breakpoint works
            pimage = _context.PostEntityImages["postcreate"]; // Breakpoint error

        break; // Breakpoint error
        }
} // Breakpoint error

更新 此外,在模块窗口中,它将dll显示为已优化:无用户代码:是符号状态:已加载符号

7 个答案:

答案 0 :(得分:33)

两种可能性,已被其他答案引用:

  1. 确保使用程序集的Debug构建而不是 发布版本,因为发布版本将删除或优化 你的代码。
  2. 确保每次都更新版本 在Visual Studio中部署程序集(在项目属性选项卡上)。 当您增加版本时,CRM将确保卸载旧版本 程序集版本并在没有IIS重置的情况下重新加载新版本。

答案 1 :(得分:4)

当我在两个Visual Studio实例中打开项目时,我遇到了同样的问题。我没有调试的项目锁定了文件并通知我“此文件已在源编辑器之外进行了修改。”接受我的非调试解决方案中的更改后,我不再收到错误,并且在我正在调试的解决方案中遇到了断点。

听起来这个错误有很多可能的原因,但这对我有用。

答案 2 :(得分:4)

当我使用Ctrl+B快捷方式创建一个断点时遇到了这个问题(请参见下图),并且我输入了一个不存在的函数的名称,因此添加了断点但导致了错误。然后每次我启动项目时,都会出现该错误。

解决方案: 我从断点列表中删除了该断点(请参见所附图像的左下方),选择了断点部分,然后选择该项并单击删除。 enter image description here

如果看不到断点部分

您可以通过点击Ctrl+Alt+B

来检索它

答案 3 :(得分:0)

除了有关正在优化的DLL的更新之外,您已指示断点不起作用的行可能会被优化掉,因为您的整个switch语句不执行任何其他操作决定是否将值赋给变量永远不会被使用,并且不会超出switch语句的范围。因此,编译器根本不会为switch语句生成任何代码,因为它根本不执行任何操作,或者jit只是在运行时因为同样的原因而删除它。

答案 4 :(得分:0)

我只是有类似的经历,我通过它的方式是在调用例程的地点放置断点然后单步进入例程,直到我看到它正在做的事情。在我的例子中,有一个返回阻止例程中的所有代码运行,因此优化器将它全部抛出。有时这是愚蠢的事情,对吗?无论如何,如果你从调用堆栈中的某个级别开始并进入问题所在的例程,那么问题的原因可能会变得更加明显。

答案 5 :(得分:0)

我刚刚发现这个问题的另一个原因是你在调试CRM时没有更新插件注册点。即使您将新的DLL复制到目标计算机并远程连接到不是DLL将使用的DLL进程。 CRM将尝试从其数据库中获取旧版本的副本,直到您重新运行插件注册。

这个错误浪费了我一天半的时间!

答案 6 :(得分:0)

开始运行调试项目时出现此错误,我通过Clean All Project和Rebuild All Project解决了这个问题,重建后错误消失了。