通过SSH附加进程调试Ubuntu上的.NET Core时断点未命中
排查ASP.NET Core Ubuntu远程调试无响应问题
核心问题定位
你遇到的是Visual Studio 2022通过SSH附加Ubuntu上的ASP.NET Core进程后,调试输出为空、模块列表无内容、断点不命中的问题——尽管vsdbg已安装,但调试器未和Visual Studio建立有效通信。
排查与修复步骤
1. 确认应用构建的调试符号配置
- 必须用Debug模式构建,确保生成完整调试符号:
执行带-c Debug参数的构建命令,保证pdb文件完整生成:dotnet build -c Debug - 检查pdb文件是否和应用程序集(.dll)在同一目录,且文件大小符合Debug构建的预期(通常比Release版pdb大)。
2. 修正vsdbg安装参数
你之前的安装命令包含了VS Code专属参数,会导致和Visual Studio 2022通信不兼容,重新执行适配VS的安装命令:
/bin/sh /home/smodev/.vs-debugger/GetVsDbg.sh -v vs2022 -u -l /home/smodev/.vs-debugger/vs2022
去掉原命令中的-d vscode和-a /remote_debugger参数,这些是针对VS Code调试的配置,和Visual Studio不兼容。
3. 确保应用以Debug模式启动
- 用Debug模式启动应用,而非Release或发布版本:
dotnet run -c Debug - 不要使用
dotnet publish后的发布文件启动,发布版本默认会优化掉调试钩子,无法正常触发断点。
4. 检查Visual Studio附加配置
- 附加进程时,在Visual Studio的附加到进程窗口中确认:
- 选择正确的Ubuntu SSH主机连接
- 附加到选项手动指定为
Managed (.NET Core, .NET 5+) code,不要用自动检测 - 勾选显示所有用户的进程,确保能找到目标ASP.NET Core进程
5. 验证调试权限与网络
- 确保运行vsdbg的用户(smodev)和启动ASP.NET Core应用的用户为同一账号,避免权限不足导致调试器无法注入
- 临时关闭Ubuntu防火墙测试:
sudo ufw disable,排除端口通信被拦截的可能
6. 手动测试vsdbg可用性
在Ubuntu终端执行以下命令,验证vsdbg本身是否正常:
/home/smodev/.vs-debugger/vs2022/vsdbg --interpreter=mi
如果能进入调试交互模式,说明vsdbg本身无问题;若报错,重新执行安装命令修复。
内容的提问来源于stack exchange,提问作者oudi
相关产品推荐
相关产品推荐

