无法获得价值因为它已被优化掉了

时间:2014-10-14 13:16:33

标签: c# .net debugging clr

调试时出现问题... 突然间,我无法在调试时看到大多数变量的值。 我设法在立即窗口中获得了两条不同的消息:

  

无法获取本地或参数'参数'的值因为它在这个指令指针上不可用,可能是因为它已被优化掉了。

  

表达式评估程序中的内部错误。

我已经尝试并检查了以下内容:

  1. 解决方案配置设置为调试(发布)
  2. 项目 - >设置 - >构建 - >优化代码设置
  3. 工具 - >选项 - >调试 - >使用Managaed兼容模式(没有工作)
  4. 您对我如何再次正确调试有任何进一步的想法吗? :(

    提前致谢

    修改 代码没什么特别的......当我试着看看参数[Key]

    里面的内容时会发生这种情况
    public void AddOrUpdateQuartzJob(string jobName, IList<KeyValuePair<string, string>> parameters)
        {
            var jobDetail = this.GetJobDetail(jobName);
    
            if (jobDetail != null)
            {
                foreach (var parameter in parameters)
                {
                    jobDetail.JobDataMap[parameter.Key] = parameter.Value;
                }
            }
            else
            {
                this.ScheduleNewJob(jobName, parameters);
            }
        }
    

4 个答案:

答案 0 :(得分:10)

我找到convince the JIT compiler not to optimize the code is to use an INI file with the name of the assembly in the same folder the assembly is in with the contents的最佳方式:

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

请注意,它必须是程序集的名称,而不是进程EXE的名称(除非它是您要调试的EXE程序集)。例如。如果您有一个程序集MyCode.dll,则INI文件名将为MyCode.ini

以下是a presentation on .Net debugging中显示差异的幻灯片:

优化:

Debugging with optimization

没有优化:

Debugging without optimization

答案 1 :(得分:1)

转到 - &gt;项目属性 - &gt;在Build - &gt;下设置&#34;优化代码&#34;复选框未选中。

另外, 在项目属性下 - &gt;构建 - &gt;高级 - &gt;设置&#34;调试信息&#34;下降到&#34; Full&#34;在选项中

答案 2 :(得分:1)

对于其他对此感到困惑的人,您可能会犯一个与我相同的简单错误:我的构建模式设置为从今天早些时候要发布的另一个项目中发布。将其翻转回Debug;问题解决了。

答案 3 :(得分:0)

在进行codekaizen和isanka thalagala列出的更改后,请不要忘记清理,重建和发布以使更改生效。