Visual studio 从VisualStudio进行Linux.NET远程调试

Visual studio 从VisualStudio进行Linux.NET远程调试,visual-studio,mono,raspberry-pi,remote-debugging,raspbian,Visual Studio,Mono,Raspberry Pi,Remote Debugging,Raspbian,我想从VisualStudio远程调试运行在Linux上的C#控制台应用程序。以下是我到目前为止的发现: Mono运行时实现了一个调试接口,允许 调试程序和IDE来调试托管代码。这就是所谓的软 MonoDevelop、Xamarin Studio和 Visual Studio(安装了适当的插件时)以及 命令行SDB客户端 Mono提供了一个API来与调试器通信并创建 通过Mono.Debugger.Soft.dll程序集拥有调试UI 下面的页面讨论了当前MonoVS调试器实现的一些问题,但我对

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

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

Mono提供了一个API来与调试器通信并创建 通过Mono.Debugger.Soft.dll程序集拥有调试UI

下面的页面讨论了当前MonoVS调试器实现的一些问题,但我对它们都很满意

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

其中包含MonoTools的下载链接:

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

在那里我可以下载Xamarin Studio入门版。单击定价链接,我发现我至少需要Visual Studio支持的Business edition,每年999美元。不,谢谢

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

发展环境:

  • Windows 7 64位
  • Visual Studio Pro 2013(如果效果更好,可能使用2010)
目标环境:

  • 覆盆子皮
  • 拉斯宾喘息
  • Mono 3.2.8
  • 通过SSH运行控制台应用程序

    • 您需要的解决方案将于今年推出。开发者“承诺”我们可以部署到任何Mono设备上,并在Visual Studio(2010至2015年)内对其进行调试。

      我知道这是一个旧线程,但以防任何人(如我)尚未找到解决方案,在今天的搜索中,我发现了这个Visual Studio 2015扩展,它的工作非常有魅力:

      请参阅以修复VS2015更新2上与Xamarin VS extension的冲突

      我希望有帮助

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

      我发现了如何使用Xamarin Studio从Windows在Linux上执行远程调试的解释,Xamarin Studio现在是免费的,除了iOS和Android开发。我在运行Raspbian Jessie Lite(2017-04-10)的Raspberry Pi Zero W上测试时遇到了一些问题,我对这些问题进行了修复,对其进行了扩展

    • 下载并安装,以及。Xamarin Studio需要.NET 4.5,但GTK需要.NET 4.6。我使用了Xamarin Studio版本6.1.2(build 44)和GTK版本2.12.44
    • 我在不同于VS2015的虚拟机上安装了Xamarin Studio,因此我还需要下载并安装和
    • 创建一个环境变量
      MONODEVELOP\u SDB\u TEST=1
      (我的电脑->属性->高级系统设置->环境变量)
    • 启动Xamarin工作室。如果未显示任何窗口,请检查文件夹
      %localappdata%\XamarinStudio-6.0\Logs
      中的日志文件,查看失败的原因
    • 我在Visual Studio 2015中创建了一个.NET 4.6控制台应用程序,并添加了NuGet包Mono.nonofficial.pdb2mdb,我使用的是版本4.2.3.4。包Mono.pdb2mdb版本0.1.0.20130128似乎不适用于VS2015生成的程序集(
      PdbDebugException:Unknown custom metadata item kind:6
    • 将.sln或.csproj文件从Visual Studio加载到Xamarin Studio。构建解决方案并使用NuGet packages文件夹中的pdb2mdb工具创建.mdb文件:
      pdb2mdb MyProgram.exe
    • 我曾经将MyProgram.exe和MyProgram.exe.mdb复制到我的Raspberry Pi
    • 我使用SSH登录并在Pi上安装了Mono 3.2.8版:
      sudo apt get install Mono complete
    • 使用调试器标志启动Mono运行时:
      Mono--debug--debugger agent=transport=dt_socket,地址=0.0.0.0:12345,服务器=y/path/to/MyProgram.exe
      。这将启动程序,但在Xamarin Studio调试器连接之前暂停执行
    • 在Xamarin Studio中设置断点并选择菜单项
      Run->Run with->Custom Configuration…
      ,然后选择
      Run Action=Debug-Custom Command Mono Soft Debugger
      。单击调试
    • IP
      Port
      字段中填写linux系统的IP地址和Mono命令行中指定的端口12345。单击
      Connect
      ,执行将开始,并在设置的断点处停止
    • 可以设置条件断点、进入/退出/覆盖代码、监视原语和对象等,而且速度也相当快。我宁愿直接从Visual Studio进行调试,但这似乎是一个完全可行的解决方案。

      在此基础上,我成功地在运行Raspbian Jessie Lite(2017-04-10)的Raspberry Pi Zero W上与VS2015合作。诀窍是安装3.2.8之后的Mono版本:

    • 安装Visual Studio扩展,我使用的是1.2.0版
    • 在Visual Studio中创建.NET 4.6控制台应用程序
    • 如果Raspberry Pi上安装了较旧的Mono版本,请使用以下命令将其删除: sudo-apt-get-purge-mono-complete

      sudo易于自动删除

    • 安装Mono 4.0.2版: sudo apt key adv--keyserverhkp://keyserver.ubuntu.com:80 --记录键3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

      echo“deb jessie-mono4 main”| sudo tee-a/etc/apt/sources.list

      sudoapt获得更新

      sudo-apt-get-install-mono-complete

    • 安装MonoRemoteDebugger服务器: wget

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

    • 启动MonoRemoteDebugger服务器: mono MonoRemoteDebugger.Server/MonoRemoteDebugger.Server.exe

    • 在Visual Studio中设置断点,并在Visual Studio中选择菜单项
      MonoRemoteDebugger->Debug with Mono(remote)
    • 将远程IP设置为树莓Pi a的IP地址
      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
      
      export DOTNET_ROOT=/opt/dotnet
      
      dotnet --info
      
      cd bin\Debug\netcoreapp3.1
      pscp -pw <password> *.dll *.pdb *.runtimeconfig.json pi@192.168.0.xxx:/home/pi
      
      ssh pi@192.168.0.xxx dotnet /home/pi/MyProgram.dll