You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code附加Mono进程时调试器无法命中断点问题排查

问题诊断与解决步骤

一、现有操作的核心问题

  1. 调试端口不匹配:启动命令中调试代理监听的是55555端口,但VSCode的Attach配置误用了xsp4的服务端口9000,导致调试连接无法建立。
  2. 符号文件缺失:未确保ASP.NET项目的.pdb符号文件随程序集一同部署到Linux,Mono依赖pdb文件解析断点位置。
  3. 调试配置错误:Launch配置的program指向目录而非有效程序路径,且未配置Windows与WSL的源代码路径映射。
  4. 源代码路径映射缺失:Windows开发路径与WSL部署路径不一致,VSCode无法关联本地源码与Mono加载的程序集。

二、修正后的完整操作步骤

1. 确认Mono版本与依赖安装

确保安装的Mono版本兼容ASP.NET 4.0,Ubuntu 22.04可通过官方源安装稳定版:

# 添加Mono官方源
sudo apt install apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

# 安装完整依赖
sudo apt install mono-complete mono-xsp4 nginx

2. 部署应用时包含符号文件

在Windows上用VS2022编译项目时,需满足:

  • 编译模式设置为Debug(而非Release)
  • 项目属性中勾选“生成调试信息”为“完整”(右键项目→属性→生成→高级→调试信息:完整)
  • 将编译输出的bin目录(包含.dll和对应的.pdb文件)完整复制到WSL的/var/www/XXX目录,不可遗漏pdb文件。

3. 修正xsp4启动命令

确保调试代理端口与后续VSCode配置一致,同时指定正确的应用根目录:

cd /var/www/XXX
MONO_MANAGED_WATCHER="y" MONO_OPTIONS="--debug --debugger-agent=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:55555" xsp4 --address 0.0.0.0 --port 9000 --verbose

注意:若你的应用入口不在Content子目录,需去掉--root Content/参数,直接以当前目录作为应用根目录。

4. 修正VSCode调试配置

打开.vscode/launch.json,替换为以下配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach to Mono",
            "request": "attach",
            "type": "mono",
            "address": "localhost",
            "port": 55555,
            "sourceFileMap": {
                // 替换为实际路径:左侧是WSL部署路径,右侧是Windows本地项目根路径
                "/var/www/XXX": "C:\\Projects\\YourAspNetApp"
            }
        }
    ]
}
  • port需与启动命令中指定的55555保持一致
  • sourceFileMap必须配置,确保VSCode能将WSL中加载的程序集映射到本地源代码文件
  • 移除错误的Debug My Mono App Launch配置,ASP.NET应用通过xsp4托管,使用Attach模式即可。

5. 启动调试流程

  1. 在WSL中执行修正后的xsp4启动命令,等待服务启动完成。
  2. 在VSCode中打开Windows本地的ASP.NET项目(而非WSL中的部署目录)。
  3. 在代码文件(如Default.aspx.cs)中设置断点。
  4. 选择“Attach to Mono”配置,点击调试启动按钮。
  5. 在浏览器访问http://localhost:9000/Default.aspx触发代码执行,此时断点应能正常命中。

6. Monodevelop调试的修正

若使用Monodevelop调试:

  1. 挂载WSL目录到Windows后,在Monodevelop中打开WSL中的项目目录。
  2. 配置调试启动项:选择“Run→Configure Projects”,设置启动命令为xsp4,参数为--port 9000,添加环境变量MONO_OPTIONS="--debug --debugger-agent=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:55555"。
  3. 确认项目已生成完整pdb符号文件。
  4. 启动调试,访问浏览器触发代码逻辑。

三、额外注意事项

  • 调试期间直接访问xsp4的9000端口,不要通过Nginx反向代理,避免代理层干扰调试连接。
  • 临时关闭WSL防火墙测试:sudo ufw disable,确认是否是端口拦截导致的问题。
  • 若仍无法命中断点,可启用Mono详细调试日志排查:在启动命令中添加MONO_LOG_LEVEL=debug MONO_LOG_MASK=d,查看程序集加载或调试连接的错误信息。

内容的提问来源于stack exchange,提问作者UmeshT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:49