惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
V
Vulnerabilities – Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
The Last Watchdog
The Last Watchdog
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
美团技术团队
G
Google Developers Blog
宝玉的分享
宝玉的分享
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
小众软件
小众软件
Google DeepMind News
Google DeepMind News
P
Privacy & Cybersecurity Law Blog
Stack Overflow Blog
Stack Overflow Blog
Webroot Blog
Webroot Blog
D
DataBreaches.Net
IT之家
IT之家
PCI Perspectives
PCI Perspectives
人人都是产品经理
人人都是产品经理
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
SecWiki News
SecWiki News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
T
Threatpost
P
Proofpoint News Feed
Y
Y Combinator Blog
Cloudbric
Cloudbric
T
Tor Project blog
量子位
博客园_首页
B
Blog
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - sPhinX

如何解决在Win11下卸载McgsPro失败的问题 如何离线安装WinDbg Preview 敏捷软件开发 原则、模式与实践 第9章的例子程序(C#版) Akavache简明使用指南 Oracle存储过程解析XML内容 P/Invoke继续谈 有意思的案例: 的问题 dnSpy调试IIS(w3wp进程) Xilium.CefGlue与SingleProcess rocketmq-client-cpp(2.0.1)编译指南 RocketMQ .NET客户端的那些坑 P/Invoke今日谈 .NET编译问题汇总 动态的世界 使用ProcDump自动生成Dump文件 Process.Start可能无法选中指定文件的问题 获取本地IP 将exe和dll打包为一个exe文件 .NET异步资料收集
dnSpy - 让调试镜像文件的工作变得轻松点
sPhinX · 2020-04-05 · via 博客园 - sPhinX

原文在这里: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 Studio\2017\Enterprise\Common7\IDE"
start devenv.exe
exit

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

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

前:

前

后:

后

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

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

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