在 Linux 上使用 SSH 通过附加到进程调试 .NET Core
自 Visual Studio 2017 起,可以通过安全外壳 (SSH) 附加到在本地或远程 Linux 部署上运行的 .NET Core 和 .NET 5+ 进程。 本文介绍调试的设置方法和调试方法。 有关使用 Docker 容器的调试场景,请转而参阅文档附加到在 Docker 容器上运行的进程和容器工具。 若要通过 Visual Studio(而不使用“附加到进程”操作)在 WSL 2 上调试 Linux,请参阅使用 Visual Studio 在 WSL 2 中调试 .NET Core 应用。
注意
若要调试在 Azure Kubernetes 服务 (AKS) 上运行的 Linux,建议使用 Bridge to Kubernetes,而不是附加到进程。
先决条件
在 Linux 服务器上,需要安装 SSH 服务器,可使用 curl 或 wget 解压缩并安装。 例如,在 Ubuntu 上,可以通过运行以下内容来实现此目的:
sudo apt-get install openssh-server unzip curl
必须启用 SSH 和 SFTP。 默认情况下,大多数 SSH 分发都会安装并启用 SFTP,但并不总是如此。
在 Linux 服务器上,在 Linux 上安装 .NET 运行时,并找到与 Linux 发行版(如 Ubuntu)匹配的页面。 .NET SDK 不是必需的。
有关全面的 ASP.NET Core 说明,请参阅使用 Nginx 在 Linux 上托管 ASP.NET Core 和使用 Apache 在 Linux 上托管 ASP.NET Core。
准备应用程序进行调试
准备应用程序以进行调试:
- 生成应用程序时,请考虑使用“调试”配置。 调试零售编译代码(发布配置)比调试编译代码要困难得多。 如果需要使用“发布”配置,请先禁用“仅我的代码”。 若要禁用此设置,请选择“工具”>“选项”>“调试”,然后选择“启用仅我的代码” 。
- 请确保项目配置为生成可移植 PDB(默认设置),并确保 PDB 与 DLL 位于相同的位置。 若要在 Visual Studio 中配置此项目,请右键单击它,然后选择“属性”>“常规”>“调试符号”。
- 请确保项目配置为生成可移植 PDB(默认设置),并确保 PDB 与 DLL 位于相同的位置。 若要在 Visual Studio 中配置此项目,请右键单击它,然后选择“属性”>“生成”>“高级”>“调试信息” 。
生成并部署应用程序
在调试之前,可以使用多种方法来部署应用。 例如,你可以:
将源复制到目标计算机,并在 Linux 计算机上使用
dotnet build
进行生成。在 Windows 上生成应用,然后将生成项目传输到 Linux 计算机。 (生成工件包含应用程序本身、可移植 PDB、它可能依赖的任何运行时库和 .deps.json 文件。)
在应用部署后,启动应用程序。
附加调试器
当应用程序在 Linux 计算机上运行时,就可以附加调试器了。
在 Visual Studio 中,选择“调试”>“附加到进程…” 。
在“连接类型”列表中,选择“SSH” 。
将“连接目标”更改为目标计算机的 IP 地址或主机名。
如果你还没有提供凭据,系统会提示你输入密码和/或私钥文件。 有关使用私钥文件的详细信息,请参阅设置远程连接。
除了 SSH 服务器运行的端口外,不需要配置任何端口。
查找要调试的进程。
代码以唯一的进程名或名为 dotnet 的进程运行。 若要查找你感兴趣的进程,请查看“Title”列,该列显示了进程的命令行参数。
在下面的示例中,你将在“附加到进程”对话框中显示的 SSH 传输上看到远程 Linux 计算机中的进程列表。
选择 “附加” 。
在显示的对话框中,选择要调试的代码类型。 选择“托管(.NET Core for Unix)”。
使用 Visual Studio 调试功能来调试应用。
在下面的示例中,你将看到 Visual Studio 调试器在远程 Linux 计算机上运行的代码断点停止。