通过SSH在Visual Studio 2019中调试远程Ubuntu服务器上的.NET Core应用时出现操作取消异常的问题排查
我之前也碰到过几乎一模一样的情况,折腾了好几天才找到几个有效的排查方向,你可以逐一试试:
确保远程调试组件
vsdbg和VS版本严格匹配
这是最容易踩坑的点!VS2019不同版本对应的vsdbg版本必须一致,不然就会出现能看到进程但附加失败的情况。你可以在远程Ubuntu服务器上重新安装对应版本的vsdbg:
比如针对VS16.8.7,执行:curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v 16.8.0 -l ~/vsdbg注意把
-v后面的版本号换成对应VS的主版本(16.9.x对应16.9.0,16.10.x对应16.10.0)。安装完成后重启远程应用再试。确认远程应用是在调试模式下运行
别大意!如果你的远程应用是用dotnet run --configuration Release启动的,或者设置了ASPNETCORE_ENVIRONMENT=Production环境变量,会自动禁用调试支持。一定要切换到Debug模式启动:dotnet run --configuration Debug同时确保应用生成时包含了调试符号(默认Debug配置会生成,别手动关掉)。
检查SSH隧道与端口权限
虽然你能通过SSH连接服务器,但调试需要的动态端口可能被Ubuntu防火墙拦截。可以临时关闭防火墙测试:sudo ufw disable如果关闭后能正常附加,就需要把VS调试用到的端口(通常是4022、4023,不同VS版本略有差异)加入防火墙白名单。另外,在VS的「附加进程」窗口,务必确认选择的是SSH连接,而不是其他远程连接类型。
重置VS的远程连接缓存
VS有时候会缓存旧的远程配置,导致连接异常。你可以删除以下路径的缓存文件:C:\Users\<你的Windows用户名>\AppData\Local\Microsoft\VisualStudio\<VS版本号>\RemoteConnections删除后重启VS,重新配置SSH连接再尝试附加。
用命令行调试工具排查细节
如果以上方法都无效,直接在远程服务器上用vsdbg命令行尝试附加进程,能看到更详细的错误日志:~/vsdbg/vsdbg --attach <你的应用进程ID> --interpreter=mi这里的进程ID可以用
ps aux | grep <应用名>获取,命令执行后的输出会告诉你具体哪里出了问题,比如符号加载失败、权限不足等。
内容的提问来源于stack exchange,提问作者Robert




