当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?
Posted
技术标签:
【中文标题】当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?【英文标题】:How remote debug C#/.Net app on Linux when the app is run under a different user? 【发布时间】:2020-07-31 12:59:49 【问题描述】:我在 Linux (Ubuntu) 上运行 .Net Core 微服务,并尝试通过 SSH 使用 Visual Studio 进行远程调试。但是该服务在用户svcuser
下运行,而我的用户是mainuser
。主用户与服务用户在同一组中。
在 Visual Studio 中,我可以看到服务正在运行的进程,但是当我尝试附加时,我得到:
发生了一个或多个错误。无法附加到进程。 .Net 调试器没有足够的权限来调试进程。要调试此进程,vsdbg 必须以 root 权限运行。
我查看了 MS 文档,但对于 Linux,他们所拥有的只是:https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-dotnet-core-linux-with-ssh?view=vs-2019,其中没有关于使用其他用户运行服务的信息
他们关于解决此类问题的唯一信息仅适用于 Windows:https://docs.microsoft.com/en-us/visualstudio/debugger/error-the-microsoft-visual-studio-remote-debugging-monitor-on-the-remote-computer-is-running-as-a-different-user?view=vs-2019
【问题讨论】:
"要调试此进程,vsdbg 必须以 root 权限运行。" @LexLi 必须有一种没有root权限的方法 你找到解决方案了吗? @NikolaGaić 不,我们最终只是将其限制在我们可以将用户设置为相同的环境中 【参考方案1】:如果您拥有sudo
权限,那么这相对容易,并且可以保护那些拥有sudo
权限的用户。无需重新配置用户/环境,并允许您调试机器上的任何进程,无论它以哪个用户帐户运行。
如果您使用 Visual Studio 首次尝试调试,您会发现在您尝试使用的用户帐户的主目录中创建了一个 ~/.vs-debugger
文件夹。此命令将帮助您找到已安装的 vsdbg
二进制文件。您可以手动安装 VsDbg,但我发现利用自动化过程更容易。如果您使用的是 VSCode,这将成为一个手动过程,并留给读者一个练习,但我仍然会使用 VS2019 IDE 来准备目标,以保持工具之间的一致性。
find ~ | grep vsdbg
对于我的安装,二进制文件位于~/.vs-debugger/vs2019/vsdbg
,并且该路径很可能会随着时间而改变。
首先,将二进制文件重命名为方便的名称:
mv ~/.vs-debugger/vs2019/vsdbg ~/.vs-debugger/vs2019/vsdbg-bin
其次,创建一个替换二进制文件的脚本:
touch ~/.vs-debugger/vs2019/vsdbg
chmod 770 ~/.vs-debugger/vs2019/vsdbg
nano ~/.vs-debugger/vs2019/vsdbg
脚本内容可能看起来像这样,注意vsdbg-bin
的完整路径,$@
的使用确保传递给脚本的所有命令行参数都转发到 VsDbg。
#!/bin/bash
sudo ~/.vs-debugger/vs2019/vsdbg-bin $@
现在从 Visual Studio 重试您的调试会话,如果您操作正确,您应该能够使用 SSH->VsDbg 附加到目标计算机上的任何远程进程。 “在我的机器上工作。” ;) 这已通过 VS2019 16.8.4
、.NET 5.0
和 VsDbg 16.9.20122.2
调试在 Debian 5.4.8 (x64)
上运行的 ASP.NET Core 应用程序得到证实,该应用程序由 systemd 在 Azure 中的服务用户帐户下启动。 “甜。”
HTH!
【讨论】:
优秀的答案! 真的很好,谢谢以上是关于当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章