从Visual Studio进行Linux .NET远程调试

问题描述 投票:31回答:6

我想从Visual Studio远程调试在Linux上运行的C#控制台应用程序。这是我到目前为止发现的内容:

http://www.mono-project.com/Debugger

Mono运行时实现了一个调试接口,该接口允许调试器和IDE来调试托管代码。这就是所谓的软调试器,MonoDevelop,Xamarin Studio和Visual Studio(安装了适当的插件时)以及命令行SDB客户端。

Mono提供了与调试器进行通信并创建您的API的API。通过Mono.Debugger.Soft.dll程序集自己的调试UI。

下面的页面讨论了当前MonoVS调试器实现的一些问题,但对我来说都很好。

http://mono-project.com/Visual_Studio_Integration

该页面还链接到MonoVS入门指南:

http://mono-project.com/GettingStartedWithMonoVS

其中包含MonoTools的下载链接:

http://mono-tools.com/download/

但是,下载链接现在重定向到:

http://xamarin.com/download/

我提供下载Xamarin Studio简化版的位置。单击“定价”链接,我看到我至少需要Visual Studio支持的商务版,每年999美元。好吧,不,谢谢。

这是我被困住的地方。我的环境的一些细节:

开发环境:

  • Windows 7 64位
  • Visual Studio Pro 2013(如果效果更好,可以使用2010)

目标环境:

  • Raspberry Pi
  • Raspbian Wheezy
  • 单声道3.2.8
  • 通过SSH运行控制台应用程序
visual-studio mono raspberry-pi remote-debugging raspbian
6个回答
17
投票

我知道这是一个旧线程,但以防万一(像我这样)尚未找到解决方案,今天在搜索时,我发现此Visual Studio 2015扩展的工作原理很像:MonoRemoteDebugger for Visual Studio 2015

请参见MonoRemoteDebugger v1.0.4以解决与VS2015 update2上的Xamarin VS扩展名的冲突。

希望对您有帮助。

调试愉快,并感谢开发人员! :)


3
投票

[我发现this guide解释了如何使用Xamarin Studio从Windows在Linux上执行远程调试,该Xamarin Studio现在免费,但iOS和Android开发除外。我已针对在运行Raspbian Jessie Lite的Raspberry Pi Zero W上进行测试时遇到的问题进行了修复,以对其进行了修复(2017-04-10)。

  1. 下载并安装Xamarin StudioGTK# for .NET.NET Framework 4.6.2。 Xamarin Studio需要.NET 4.5,但GTK#需要.NET 4.6。我使用了Xamarin Studio版本6.1.2(内部版本44)和GTK#版本2.12.44。
  2. 我在与VS2015机器不同的虚拟机上安装了Xamarin Studio,因此我还需要下载并安装MSBuild Tools 2013MSBuild Tools 2015
  3. 创建环境变量MONODEVELOP_SDB_TEST = 1(我的电脑->属性->高级系统设置->环境变量)。
  4. 启动Xamarin Studio。如果未显示任何窗口,请检查文件夹%localappdata%\XamarinStudio-6.0\Logs中的日志文件以查看失败的原因。
  5. 我在Visual Studio 2015中创建了.NET 4.6控制台应用程序,并添加了NuGet包Mono.Unofficial.pdb2mdb,我使用的是4.2.3.4版。软件包Mono.pdb2mdb版本0.1.0.20130128似乎不适用于VS2015(PdbDebugException: Unknown custom metadata item kind: 6)生成的程序集。
  6. 将Visual Studio中的.sln或.csproj文件加载到Xamarin Studio中。生成解决方案并使用NuGet包文件夹中的pdb2mdb工具创建一个.mdb文件:pdb2mdb MyProgram.exe
  7. 我使用WinSCP将MyProgram.exe和MyProgram.exe.mdb复制到我的Raspberry Pi。
  8. [我使用SSH登录到Putty,并在Pi上安装了Mono版本3.2.8:sudo apt-get install mono-complete
  9. 使用调试器标志启动Mono运行时:mono --debug --debugger-agent=transport=dt_socket,address=0.0.0.0:12345,server=y /path/to/MyProgram.exe。这将启动程序,但会停止执行,直到Xamarin Studio调试器已连接。
  10. 在Xamarin Studio中设置断点,然后选择菜单项Run -> Run with -> Custom Configuration...,然后选择Run Action = Debug - Custom Command Mono Soft Debugger。单击Debug
  11. IPPort字段中填入Linux系统的IP地址和Mono命令行中指定的端口12345。单击Connect,将开始执行,并在设置的断点处停止。

Screenshot of Xamarin Studio Debugging

可以设置条件断点,进入/跳出/跳出代码,监视基元和对象等,而且速度也相当快。我宁愿直接从Visual Studio调试,但这似乎是一个可以正常工作的解决方案。


0
投票

您需要的解决方案是今年MonoDebugger.NET。开发人员“承诺”我们可以部署到任何Mono设备上,并在Visual Studio中对其进行调试(2010年至2015年)。


0
投票

基于Gutemberg Ribeiro's answer,我设法在运行Raspbian Jessie Lite(2017-04-10)的Raspberry Pi Zero W上使MonoRemoteDebugger与VS2015一起使用。诀窍是要安装高于3.2.8的Mono版本:

  1. 安装MonoRemoteDebugger Visual Studio扩展,我使用版本1.2.0。
  2. 在Visual Studio中创建.NET 4.6控制台应用程序。
  3. 如果在Raspberry Pi上安装了较旧的Mono版本,请使用以下命令将其删除:

    sudo apt-get purge mono-complete

    sudo apt-get autoremove

  4. 安装Mono版本4.0.2:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

    echo“ debhttp://plugwash.raspbian.org/mono4jessie-mono4 main” | sudo tee -a /etc/apt/sources.list

    sudo apt-get更新

    sudo apt-get install mono-complete

  5. 安装MonoRemoteDebugger服务器:

    wget https://github.com/techl/MonoRemoteDebugger/releases/download/v1.2.0/MonoRemoteDebugger.Server.zip

    解压-d MonoRemoteDebugger.Server MonoRemoteDebugger.Server.zip

  6. 启动MonoRemoteDebugger服务器:

    mono MonoRemoteDebugger.Server / MonoRemoteDebugger.Server.exe

  7. 在Visual Studio中设置断点,然后在Visual Studio中选择菜单项MonoRemoteDebugger -> Debug with Mono (remote)
  8. 将Remote-IP设置为Raspberry Pi的IP地址,然后单击Connect。 MonoRemoteDebugger将编译该程序并将其传输到Raspberry Pi。无需手动运行pdb2mdb,该.mdb文件将由MonoRemoreDebugger服务器创建。

Screenshot

老实说,调试功能非常有限。简单的断点和进入/退出/遍历代码似乎还可以。在函数中设置断点,然后单步执行该函数调用不会在断点处停止。

可以查看原始类型,但是无法显示我尝试查看的对象。 “调用堆栈”视图非常有限,“线程”视图为空。无法捕获异常,但会导致MonoRemoteDebuggerServer出现“ [ERROR] FATAL UNHANDLED EXCEPTION”消息。但是,如果您可以忍受这些限制,则设置会比Xamarin Studio route更简单。


0
投票

有Xamarin Studio / MonoDevelop的插件

https://github.com/logicethos/SSHDebugger


-1
投票

这是一个非常老的问题,但是我终于找到了一种很好的方法来对在Raspberry Pi上运行的C#代码进行远程调试。我已经从Mono切换到.NET Core,现在可以使用Visual Studio调试在Pi上运行的代码,几乎与在开发计算机上运行时一样简单。

以下步骤已使用Windows 10版本1909,Visual Studio 2019版本16.4.3,Raspbian Buster Lite版本2020-02-13和Raspberry Pi 2模型B进行了测试。.NETCore需要ARMv7 CPU,因此它将无法运行在Raspberry Pi 1和零上。

  1. 转到https://dotnet.microsoft.com/download/dotnet-core并选择.NET Core 3.1(或更高版本)。单击Linux ARM32运行时二进制文件的链接,然后复制显示在下一页的直接链接。 (不要右键单击ARM32链接并选择复制链接地址,因为如果下载该链接,则会得到一个网页。)

.NET Core download website

  1. 打开与Pi的SSH会话,下载并安装二进制文件:
ssh [email protected]
wget https://download.visualstudio.microsoft.com/download/pr/c11e9248-404f-4e5b-bd99-175079419d6f/83902a43e06f9fb4e45a4c6a6d5afc0b/dotnet-runtime-3.1.3-linux-arm.tar.gz
sudo mkdir /opt/dotnet
sudo tar zxf dotnet-runtime-3.1.3-linux-arm.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/bin/dotnet
  1. 将以下行添加到~/.bashrc,注销并再次登录以激活:
export DOTNET_ROOT=/opt/dotnet
  1. 检查.NET Core是否已正确安装:
dotnet --info

Output from dotnet --info

  1. 在Visual Studio中创建.NET Core Console App。设置Target framework = .NET Core 3.1(或您下载到Pi的版本)。确保项目→属性→构建→输出→高级→调试信息=可移植。

Advanced build settings

  1. [在Visual Studio中构建项目,并将所有* .dll,*。pdb和* .runtimeconfig.json文件从开发计算机复制到Pi。可以使用PuTTY's pscp command
cd bin\Debug\netcoreapp3.1
pscp -pw <password> *.dll *.pdb *.runtimeconfig.json [email protected]:/home/pi
  1. 打开与Pi的SSH会话并运行程序,或使用ssh从开发计算机启动它:
ssh [email protected] dotnet /home/pi/MyProgram.dll
  1. 通过在Visual Studio中选择“调试”→“附加到进程”菜单项来附加到远程进程。选择Connection type = SSH,然后在Connection target文本框中,键入[email protected],然后按Enter。

Connection target

  1. 输入密码,然后单击连接按钮。

Connect window

  1. 单击选择按钮。

Attach to process image

  1. 选择Managed (.NET Core for Unix),然后单击确定按钮。

Select code type

  1. 选择dotnet MyProgram.dll处理,然后单击附加按钮。第一次连接可能需要几分钟,但后续连接要快得多。

享受设置断点,添加监视功能,单步执行代码甚至使用“ Set Next Statement”的速度-几乎与在本地计算机上调试时一样快。到目前为止,我唯一缺少的是“编辑并继续”,但不足以调查是否有可能实现。

© www.soinside.com 2019 - 2024. All rights reserved.