.NET5 Azure Web App远程调试连接后随机断开无法命中断点问题求助
提问:Azure上.NET 5服务远程调试连接后随机断开无法命中断点
我有一个运行在Azure上的.NET 5服务,在解决了相关问题后已经可以成功连接远程调试,但现在遇到新问题:调试器连接成功后会随机断开。
我尝试了以下操作:
- 多次重启Azure上的服务,也测试过手动停止后再重新启动服务
- 为了跟踪ConfigureServices方法执行逻辑,我在服务启动后立即按快捷键重新附加到进程
- 调试器可以成功连接
- 但没有任何反应,无法命中任何断点
- 我不认为是操作太慢的问题,使用
Thread.Sleep或者Task.Delay也无法捕获到断点 - 连接成功后很快我的输出窗口就出现对应输出内容
- 几秒后弹出对应报错提示
- 我在Azure诊断工具的应用程序事件日志中看到了对应日志列表(我已多次尝试调试)
- 我认为其中两条条目相关:第一条显示RDB已连接,第二条显示应用程序已关闭
另外本地调试完全正常,请问我可以在哪里获取更多日志信息?这个问题的原因是什么?
我还在VS2019的云资源管理器中找到了额外日志,eventlog.xml中有大量事件提示调试器已连接。
希望大家能帮忙排查问题,否则我只能在解决方案中新建项目、重新创建Azure服务来排查是否是现有组件配置错误。谢谢大家!
更新: 我已经重新创建了Azure服务,在VS2019中新建了项目,但问题仍然存在。我也对比了带View的新项目测试,通过抛异常的方式验证到整个Startup类的代码都可以正常执行,仅远程调试功能异常,报错原因为远程调试器已连接。
问题排查方案与可能原因
核心触发原因
- 远程调试组件版本不匹配:VS2019默认携带的远程调试工具版本,与Azure App Service上部署的.NET 5运行时对应的远程调试组件存在版本兼容问题,会导致连接后进程异常退出
- 进程附加错误:.NET 5的gRPC服务在Azure App Service上运行时,默认宿主进程为
dotnet.exe而非传统的w3wp.exe,如果附加时选到了错误的进程就会出现连接后无响应、自动断开的情况 - 应用服务未开启Always On:Azure App Service默认会将空闲超过20分钟的进程回收,调试过程中如果触发了回收规则就会自动断开
- 平台位数不匹配:如果本地编译的程序是32位,而Azure App Service配置为64位运行,反之亦然,会导致调试器无法正确加载符号,触发进程异常退出
- 符号加载配置错误:发布时未携带对应版本的PDB符号文件,或者VS的符号加载路径配置错误,会导致调试器连接后无法命中断点,最终触发超时断开
更多日志获取路径
- Azure门户对应应用服务的【诊断和解决问题】面板,搜索「远程调试失败」即可获取平台侧的调试连接全链路日志
- 进入应用服务的【高级工具(Kudu)】,在
DebugConsole路径下进入LogFiles/RemoteDebugging文件夹,可获取远程调试组件的完整运行日志 - VS2019的【工具-选项-调试-输出窗口】,将「调试日志详细程度」调整为「详细」,可获取本地调试器的连接交互日志
验证修复步骤
- 先在Azure门户应用服务的【配置-常规设置】中,确认以下配置:
- 开启
Always On选项 - 平台位数与本地编译的程序位数保持一致
- 远程调试版本选择对应VS2019的版本,不要选自动匹配
- 开启
- 发布程序时选择
Debug模式,或者发布Release模式时勾选「生成调试符号」选项 - 附加进程时优先选择
dotnet.exe进程,若存在多个dotnet.exe进程可先停止应用服务再启动,确保只存在一个运行中的服务进程 - 若仍有问题,可安装对应版本的Azure远程调试工具独立安装包,手动同步本地与Azure侧的调试组件版本
内容的提问来源于stack exchange,提问作者GeKu
相关产品推荐
相关产品推荐

