zoukankan      html  css  js  c++  java
  • 当前方法的代码已经过优化,因此无法计算表达式的值

    当前方法的代码已经过优化,因此无法计算表达式的值

    /***********************************************************************************/

    解决方法:vs2010->工具->选项->调试->常规->勾选“启用.NET Framework源代码单步执行”,不勾选“启用‘仅我的代码’(仅限托管)”。点击确定后,会有一个下载公共符号的过程,如下图,耐心等待下载完成,并重启调试即可。

    /**************************************************************************************/

    VS2010中调试.NET Framework的源代码:处理无法计算表达式的值的错误(转)

    在使用VS2010调试MS提供的.NET Framework源代码的时候,有可能你会碰到在调试的时候,很多变量都是不能正常查看的。而在极端的时候,你查看所有的变量都会报错,比如:当前方法的代码已经过优化,因此无法计算表达式的值。

      我这两天就碰到VS2010 报:"当前方法的代码已经过优化,无法计算表达式的值"的这个错误了,具体的错误截图如下图。

    这个错误结果非常明显,就应该是我执行的时候,执行的是已经经过优化过的代码了,但是在那里设置,还真是不知道。在网上搜索,这方面信息也不多,发现最多的说法是:

    1. 当前运行的版本应该设置为Debug;
    2. 如果不行,尝试下,先Step over下,在查看下值;

      当然,这些尝试都对我无效,还有一个说法是设置问题(其实就是要启用Debug .NET Framework的设置方法):

    1. 在工具->选项->调试->符号->设置:设置好 (标准步骤)
    2. 在工具->选项->调试->常规->勾选 启用.NET Framework源代码单步执行
    3. 在工具->选项->调试->常规->不勾选 启用"仅我的代码"(仅限托管) (这个是在上一步操作的时候,系统会自动提示你的,确定就去掉勾选了)

      设置好类似下面这样的:

    当然这些对我的这个报错都没有用,但我还是决定将它们列出来,相信对其他的朋友会有一定的帮助。

      我的这个"当前方法的代码已经过优化,因此无法计算表达式的值"在中文搜索是没有找到多少有价值的参考,无奈,我只好选择英文搜索下:Cannot evaluate expression because the code of the current method is optimized. 如果你需要查找,可以使用这个作为关键词试试,当然,遗憾的是我在初步看下来的时候,并没有我需要的信息(也许有,没看到),大部分的都是问为什么自己的代码在调试会出现这个问题。

      在问题明确的前提下,我的目标明确而单一——就是找个方法,让VS2010 在调试的时候禁止启用优化

      最终我找到了方案:其中How to disable optimizations during debuging给出了其他人的两个不同方案。E文好的可以直接参阅,我这里简要说明下这两个方案,为E文不是很好的朋友抛个砖:

    • 在启动的时候设置环境变量,让VS2010启动的时候加载之后,在代码调试的时候不执行优化

    这个方法理论不难,第一步:是在cmd下来启动VS2010,你输入

    ## 设置环境变量

    > set COMPLUS_ZapDisable=1
    ## 这里路由到你VS2010安装的目录下面,这句是原文的,在我机器上用不了
    ## 因此,如果你要使用,请改成适当的路径
    > cd /d "%ProgramFiles%Microsoft Visual Studio 10.0Common7ide"
    ## 启动VS2010
    > start devenv.exe
    ## 退出CMD
    > exit
     
    但是这个每次启动都要在cmd下来启动denenv.exe(VS2010 IDE),比较麻烦,因此,原文作者也建议(我附议),将这个代码保存成debuging.bat(文件名是我想的,你可随意),代码参见上面的即可,每次要测试的时候,直接双击bat运行进入IDE环境。
    第二步:在进入VS2010 加载要调试的程序之后,右键项目->属性->调试->不勾选 启用Visual Studio 承载进程,保存。
     
     

    第三步:不用说,调试吧。

    注意,这里我要补充下,在Web 程序测试的时候,并没有上面那项:启用Visual Studio,也没有调试Tab,因此,不用操作第二步即可。我的Web程序就在第一步设置变量后成功追踪到参数值。

    • 是在需要调试的目录中创建和应用程序名称一样的一个.ini文件,比如你程序是ABC.exe,那么你需要的是一个ABC.ini文件

     这个方法同样也是要配置参数的,只不过将参数放到了应用程序下面来操作,具体操作你可以参照MSDN上的这篇文章来做,简单点说,就是在程序同目录下,放同名的ini文件,文件内容为下面这些内容:

    [.NET Framework Debugging Control]

    GenerateTrackingInfo=1
    AllowOptimize=0
    就这样简单,你就可以在IDE中禁用优化,方便执行Debug工作。
  • 相关阅读:
    2017.10.30 天晴 昨天十公里没减肥
    我的一辩论点,随心而论
    2017.10.27 多云 天气晴
    2017.10.14 多云 天气转冷
    2017.10.9 天晴 准备减肥,有一起打卡的吗
    2017.10.7 国庆第8天
    2017.10.7 国庆第7天{鳏寡孤独}
    java多线程概念
    spring mvc分拣查询参数
    spring mvc 导出excel
  • 原文地址:https://www.cnblogs.com/tl2f/p/6544491.html
Copyright © 2011-2022 走看看