Cannot obtain value because it has been optimized away

本小妞迷上赌 提交于 2019-12-05 14:25:39

问题


I have a problem with debugging... All of a sudden I can't see the values of most variables while debugging. I've managed to get two different messages in the Immediate Window:

Cannot obtain value of local or argument 'parameter' as it is not available at this instruction pointer, possibly because it has been optimized away.

and

Internal error in the expression evaluator.

I've tried and checked the following things:

  1. Solution Configuration is set to debug (not release)
  2. Project -> Settings -> Build -> Optimize code is not set
  3. Tools -> Options -> Debugging -> Use Managaed Compatibility Mode (didn't work)

Do you have any further ideas how I can properly debug again? :(

Thanks in advance

Edit The code is nothing special.. it happens when I try to watch what's inside parameter[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);
        }
    }

回答1:


The best way I've found to 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

Note that it has to be the name of the assembly, not the name of the process EXE (unless it is the EXE assembly you want to debug). E.g. if you have an assembly MyCode.dll the INI file name would be MyCode.ini.

Here are some slides from a presentation on .Net debugging which show the difference:

With Optimization:

Without Optimization:




回答2:


Go to -> Project Properties -> under Build -> set "Optimize Code" checkbox Unchecked.

Also, Under Project Properties -> Build -> Advanced -> set the "Debug Info" dropdown to "Full" in the Options




回答3:


For anyone else who was stumped on this, you may be making the same simple mistake I was: my build mode was set to Release from another project I had to build for release earlier in the day. Flip it back to Debug; problem solved.




回答4:


After making the changes listed by codekaizen and isanka thalagala, do not forget to clean, rebuild and publish to make the changes effective.



来源:https://stackoverflow.com/questions/26361825/cannot-obtain-value-because-it-has-been-optimized-away

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!