• dnSpy


    原文在这里:https://github.com/0xd4d/dnSpy/wiki/Making-an-Image-Easier-to-Debug

    参考了这里:https://docs.microsoft.com/zh-cn/archive/blogs/sburke/how-to-disable-optimizations-when-debugging-reference-source

    当你把调试器附加到任意的.NET进程时,这个进程很有可能是被优化过的。这会使得调试过程中的体验变的很差,因为调试器无法读取所有的局部变量,对表达式求值或调用方法。所以你应该尽可能让dnSpy来启动进程

    如果你不得不附加进程的话,微软推荐你新建一个ini文件

    如果你的文件叫myapp.exe或者something.dll,那你相应的需要新建一个叫myapp.ini或者something.ini的文件,并把这个文件放到与exe或者dll文件所在的同一个文件夹下,文件内容如下:

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

    注意:不能用UTF8 BOM编码方式保存这个文件!

    必须给每一个exe或者dll文件配备一个相应的ini文件,光是给主exe文件配ini文件是不够。

    另外,为了关闭.NET的优化选项,需要告诉CLR不要加载per-JIT(也就是通常所谓的NGEN)镜像文件,你可以新建一个CMD文件,名字可以叫NoOptDevEnv.cmd,内容大致如下:

    set COMPLUS_ZapDisable=1
    cd /d "%ProgramFiles(x86)%Microsoft Visual Studio2017EnterpriseCommon7IDE"
    start devenv.exe
    exit

    当然你也可以选择设置系统环境变量,只不过这样影响面更大,如何选择视你的需要而定。

    对于老版本的Visual Studio来说,你还需要关掉项目调试选项中的承载进程选项。这下你可以看到所有的局部变量信息了。

    前:

    前

    后:

    后

    顺便说下关掉承载进程有什么影响(虽然绝大多数情况下都没有什么影响):

    1、不能在区域中调试(Debug In Zone),无法调试在类似“Internet”或者”Intranet”这样安全区域中的进程了。

    2、类库的设计时表达式求值功能也无法使用,这意味着不能在调试器中的立即窗口里面执行代码了。

  • 相关阅读:
    LintCode 17.子集
    JS时间操作
    Ajax总结
    Ajax请求文件下载操作失败的原因和解决办法
    遍历Map的几种方式
    java获取文件大小的方法
    Ajax详细介绍
    第31课
    30-React JSX IN DEPTH
    28-React state提升、组件组合或继承
  • 原文地址:https://www.cnblogs.com/s5689412/p/12636395.html
Copyright © 2020-2023  润新知