2011-12-20 182 views
21

这实际上是此问题的另一部分。公共语言运行时无法设置断点

Error settings breakpoints but only on some lines while debugging

我远程调试CRM 2011插件在VS 2010

I'n我的源文件,我可以将所有整个代码断点一个除了少数地方。

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

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 

UPDATE 此外,在模块窗口它显示为优化该dll:没有用户代码:是的符号状态:符号加载

+1

请添加您的代码!有很多情况(比如lambda表达式,例如没有初始化的变量声明),您无法正常设置断点。 – 2011-12-20 19:15:40

+0

http://blogs.msdn.com/b/habibh/archive/2009/09/01/troubleshooting-common-breakpoint-problems-in-the-visual-studio-debugger-part-i.aspx – 2011-12-20 19:18:03

+0

@DJKRAZE F9做同样的事情。检查问题中的链接以查看示例代码。 – user1231231412 2011-12-20 19:18:04

回答

0

而且你对DLL更新被优化你的线已经指出断点不起作用的地方可能会被优化掉,因为你的整个switch语句没有做任何事情,而是决定是否给一个从未使用过的变量赋值并且不超出switch语句的范围。因此,编译器根本不会为switch语句生成任何代码,因为它根本没有做任何事情,或者出于同样的原因,jit在运行时就会被删除。

+0

正确。通过反射器显示它已转换为if语句。 – user1231231412 2011-12-20 22:22:46

3

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

听起来好像这个错误有很多可能的原因,但是这对我来说确实如此。

0

我刚刚也有类似的经历,而且我的工作方式是在调用例行程序的地方放一个断点,然后单步进入例行程序,直到我看到它到底在做什么。在我的情况中,有一个返回阻止了例程中的所有代码运行,所以优化器将其全部抛出。有时候这是愚蠢的事情,对吗?无论如何,如果您从调用堆栈中较高的级别开始,并进入问题所在的例程,问题的原因可能会变得更加明显。

0

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

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

26

两种可能性,已经由其他答案一种参考:

  1. 确保您使用的组件,而不是 发布版本的调试版本,因为发布版本将删除或优化 您码。
  2. 确保每次在您的Visual Studio中(在项目属性选项卡上)部署程序集时,您都在更新版本。 当您增加版本时,CRM将确保卸载旧的 程序集版本并重新加载新的版本,而不会重置IIS。
0

我在开始运行调试项目时遇到了这个错误,我通过Clean All Project和Rebuild All Project来解决它,重建错误后消失。

相关问题