【问题标题】:How remote debug C#/.Net app on Linux when the app is run under a different user?当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?
【发布时间】: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ć 不,我们最终只是将其限制在我们可以将用户设置为相同的环境中

标签: c# linux visual-studio .net-core remote-debugging


【解决方案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.0VsDbg 16.9.20122.2 调试在 Debian 5.4.8 (x64) 上运行的 ASP.NET Core 应用程序得到证实,该应用程序由 systemd 在 Azure 中的服务用户帐户下启动。 “甜。”

HTH!

【讨论】:

  • 优秀的答案!
  • 真的很好,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2011-09-30
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多