从Visual Studio进行单声道远程调试

时间:2014-04-16 11:55:39

标签: visual-studio mono raspberry-pi remote-debugging raspbian

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

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

  

Mono运行时实现允许的调试接口   用于调试托管代码的调试器和IDE。这叫做Soft   调试器,并受MonoDevelop,Xamarin Studio和   Visual Studio(安装适当的插件时)以及   命令行SDB客户端。

     

Mono提供了一个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
  • Mono 3.2.8
  • 通过SSH运行控制台应用程序

6 个答案:

答案 0 :(得分:17)

我知道这是一个旧帖子,但万一有人(像我一样)还没有找到解决方案,但今天搜索时,我发现这个Visual Studio 2015扩展程序就像一个魅力:{{ 3}}

请参阅MonoRemoteDebugger for Visual Studio 2015以修复VS2015 update2上与Xamarin VS扩展的冲突。

我希望它有所帮助。

快乐的调试并感谢开发人员! :)

答案 1 :(得分:3)

我发现this guide解释了如何在Windows上使用Xamarin Studio在Linux上执行远程调试,除了iOS和Linux之外,它现在是免费的。 Android开发。我在运行Raspbian Jessie Lite(2017-04-10)的Raspberry Pi Zero W上测试它时遇到的问题我已经扩展了它。

  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. 使用Mono命令行中指定的linux系统和端口12345的IP地址填写IPPort字段。单击Connect,将开始执行,在设置的断点处停止。
  12. Screenshot of Xamarin Studio Debugging

    可以设置条件断点,进入/退出/遍历代码,观察基元和对象等,并且它也非常快。我宁愿直接从Visual Studio调试,但这似乎是一个完全可行的解决方案。

答案 2 :(得分: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进行了测试.NET Core需要ARMv7 CPU,因此它不会在Raspberry Pi 1和Zero上运行。

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

.NET Core download website

  1. 打开与Pi的SSH会话,下载并安装二进制文件:
ssh pi@192.168.0.xxx
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 pi@192.168.0.xxx:/home/pi
  1. 打开与Pi的SSH会话并运行程序,或者使用ssh从开发计算机启动它:
ssh pi@192.168.0.xxx dotnet /home/pi/MyProgram.dll
  1. 通过在Visual Studio中选择“调试”→“附加到进程”菜单项来附加到远程进程。选择Connection type = SSH,然后在Connection target文本框中,键入pi@192.168.0.xxx,然后按Enter。

Connection target

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

Connect window

  1. 单击“选择”按钮。

Attach to process image

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

Select code type

  1. 选择dotnet MyProgram.dll进程,然后单击“附加”按钮。第一次连接可能需要几分钟,但随后的连接会更快。

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

答案 3 :(得分:0)

您需要的解决方案将于今年推出MonoDebugger.NET。开发商&#34;承诺&#34;我们可以部署到任何Mono设备,并在Visual Studio中进行调试(2010年至2015年)。

答案 4 :(得分:0)

Gutemberg Ribeiro's answer的基础上,我设法让MonoRemoteDebugger在运行Raspbian Jessie Lite(2017-04-10)的Raspberry Pi Zero W上使用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“deb http://plugwash.raspbian.org/mono4 jessie-mono4 main”| sudo tee -a /etc/apt/sources.list

         

    sudo apt-get update

         

    sudo apt-get install mono-complete

  5. 安装MonoRemoteDebugger服务器:
      

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

         

    unzip -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地址,然后单击“连接”。 MonoRemoteDebugger将编译程序并将其传输到Raspberry Pi。无需手动运行pdb2mdb,.mdb文件将由MonoRemoreDebugger服务器创建。
  9. Screenshot

    老实说,调试功能非常有限。简单的断点和进/出代码似乎工作得有点好。在函数中设置断点然后单步执行该函数调用将不会在断点处停止。

    可以观看原始类型,但无法显示我尝试观看的对象。 “调用堆栈”视图非常有限,“线程”视图为空。异常没有被捕获,但会导致MonoRemoteDebuggerServer发出“[ERROR]致命不受限制的异常”消息。但是如果你能忍受这些限制,那么设置就比Xamarin Studio route简单。

答案 5 :(得分:0)

Xamarin Studio / MonoDevelop有一个插件

https://github.com/logicethos/SSHDebugger