这实际上是这个问题的另一部分。
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显示为已优化:无用户代码:是符号状态:已加载符号
答案 0 :(得分:33)
两种可能性,已被其他答案引用:
答案 1 :(得分:4)
当我在两个Visual Studio实例中打开项目时,我遇到了同样的问题。我没有调试的项目锁定了文件并通知我“此文件已在源编辑器之外进行了修改。”接受我的非调试解决方案中的更改后,我不再收到错误,并且在我正在调试的解决方案中遇到了断点。
听起来这个错误有很多可能的原因,但这对我有用。
答案 2 :(得分:4)
当我使用Ctrl+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解决了这个问题,重建后错误消失了。