Visual Studio 2019附加w3wp进程调试时出现无响应问题
故障现象
- 对IIS的
w3wp进程执行附加调试操作时,Visual Studio 会永久卡死无响应,仅能通过任务管理器强制结束VS进程恢复,该调试功能在昨日可正常运行 - 本次调试目标为内存占用偏高的 .NET MVC 应用
- 所用设备配置为16GB内存,触发故障时CPU使用率为77%(部分场景下CPU使用率更低),暂未找到明确触发规律
- 已尝试以下修复操作均无效:多次重启Visual Studio、重启操作系统、清理系统临时文件与VS缓存、释放硬盘存储空间(当前系统盘剩余可用空间125GB)
故障截图:
可按以下优先级排查修复
- 修改调试符号加载配置
打开VS菜单「工具-选项-调试-符号」,取消勾选所有微软远程符号服务器、第三方符号源,仅保留本地项目生成的符号路径。附加进程时不要默认加载所有模块符号,手动选择项目相关的dll加载即可——高内存场景下全量加载符号会占用巨量内存,极易触发VS无响应。 - 手动指定调试代码类型
附加进程窗口里,不要选择「自动确定要调试的代码类型」,手动勾选「托管(.NET Framework)」对应版本即可。自动识别模式下VS会尝试同时挂载原生、脚本、T-SQL等多种调试器,附加高内存进程时很容易触发加载死锁。 - 排查第三方扩展冲突
关闭所有VS窗口,在运行窗口执行devenv /safemode以安全模式启动VS(该模式下所有第三方扩展会被禁用),再尝试附加w3wp进程。如果此时附加正常,逐个启用扩展排查,尤其是性能分析、代码重构、AOP探针类扩展,这类扩展很容易在附加高内存进程时触发挂死。 - 避免物理内存不足导致的IO挤兑
16GB内存的设备,如果目标w3wp进程内存占用已经超过7GB,在线附加时VS需要读取进程全量内存映射,很容易因为物理内存不足触发频繁磁盘换页,直接卡成无响应。这种情况不要直接在线附加,先使用procdump -ma <w3wp进程ID>命令生成进程全量dump,再用VS打开dump离线调试即可。 - 回滚最近的更新
检查昨日至今是否安装过VS累积更新、Windows系统更新,部分VS小版本更新存在附加IIS进程的已知死锁bug,如果确认是更新后出现的问题,回滚VS到上一个稳定版本即可恢复。
内容的提问来源于stack exchange,提问作者The Inquisitive Coder
相关产品推荐
相关产品推荐

