本文记录的是在 Windows 系统里面,使用 VisualStudio 2022 远程调试运行在 UOS 里面 dotnet 应用的配置方法

本文写于 2024.03.19 如果你阅读本文的时间距离本文编写的时间过于长,那本文可能包含过期的知识

我将以我的 UOS 虚拟机作为例子告诉大家如何在 Windows 系统里面,使用 VisualStudio 2022 远程调试运行在 UOS 里面 dotnet 应用。这里的 dotnet 应用不仅包含纯控制台即可实现的 ASP.NET Core 也包括带 GUI 的程序,包括 CPF 、 UNO/MAUI、 Avalonia 等 UI 框架上构建的可运行在 UOS Linux 系统上的应用

准备

第一步是保证 UOS 和 Windows 构成局域网网络,或可直接联通的网络。这一步可自行了解网络配置,只要双方网络能互通即可,挂在一个局域网内相同网段是最好的选择

其次是在 UOS 里面开启开发者模式,开启方法请参阅 如何打开开发者模式?-UOS官方文档

准备工作就此两步,接下来就是进行配置

配置

接着的配置步骤可以分为两大块,分别是 SSH 的开启以及 VisualStudio 的连接

开启 SSH 的支持

默认的 UOS 是没有开启 SSH 的支持的,本文将使用 Tame-complexity 大佬在博客园里面的写的 Linux开启ssh - Tame-complexity - 博客园 博客里面的部分方法开启 ssh 连接,具体步骤如下

先修改sshd服务配置文件,修改此文件需要权限

sudo su
> 输入你的密码
vi /etc/ssh/sshd_config

进入 sshd_config 编辑入以下代码,这里有一个可简化的输入方法,那就是一般此文件里面只是包含大量被注释掉的配置,只需要找到对应的配置,解开注释即可

Port 22
ListenAddress 0.0.0.0
ListenAddress :: PermitRootLogin yes
PasswordAuthentication yes

相信阅读到这里的伙伴是知道 vim 的基础操作的,如果不了解的话,还请自行查阅一下 vim 如何编辑文件以及如何保存退出哈。简单说就是按下 i 键进入编辑模式,然后使用 esc 键盘退出编辑模式,再输入 :wq 即可完成保存退出

如果是解开注释的话,需要小心 PermitRootLogin 配置项默认是 prohibit-password 的值,需要改为 yes 才对

![](image/UOS 开启 VisualStudio 远程调试 .NET 应用之旅/UOS 开启 VisualStudio 远程调试 .NET 应用之旅4.png)

配置完成之后,使用以下命令了解一下 ssh 的运行情况

/etc/init.d/ssh status

默认新装的 UOS 都是关闭的状态,请使用以下代码进行开启

/etc/init.d/ssh start

开启之后,继续使用 /etc/init.d/ssh status 命令了解一下状态,预期是能够正确开启。如果不能正确开启,再根据错误信息,自行解决

使用 VisualStudio 连接

打开一个 VisualStudio 2022 用于尝试附加调试连接

点击调试里面的附加进程

点击连接类型,切换到 ssh 类型

在连接目标里面输入 UOS 的网络地址,这里支持 IP 或域名,如果开启的 SSH 端口非 22 端口,这里也可以不用输入端口,可以在后续界面再输入。输入完成之后按回车,或者点查找按钮,但查找按钮有时候会不工作,推荐还是按回车好

按下回车之后,可以看到如下界面,输入你的端口和用户名密码,即可点击连接

如果能够看到提示是否要继续连接,请点击 是 按钮

预期是能够看到以下调试界面,如能看到则表示连接成功,如果连接失败,请回到上一步,确定自己配置正确了 SSH 连接

常见的错误就是网络连不通,以及输入错账号密码等

开启调试

接下来将使用 dotnet-campus 开源的下载器项目作为调试的例子

先从可用进程选中将要调试的应用,接着的细节是点击附加到里面,选择手动以及选择 托管(.NET Core for Unix)代码 选项。这是因为默认的 VisualStudio 的自动选择经常不工作

点击调试以下代码类型,然后选择 托管(.NET Core for Unix)代码 即可

如果大家看到附加按钮是禁用状态,也可以尝试以上的选择 托管(.NET Core for Unix)代码 步骤

完成配置之后,即可点击附加按钮,基本都能成功

但如果有遇到以下失败的,提示 未能启动调试适配器,可在输出窗口查看额外的信息

Unable to find debugger script at 'home/lin/.vs-debugger'.

看到错误有以下代码

[ERROR] 灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))

也有类似如下错误输出信息

11:34:39:958	未能启动调试适配器“coreclr”。
11:34:39:958 Unable to find debugger script at '/home/lin/.vs-debugger'.
11:34:39:958
11:34:39:958
11:34:39:959 初始化日志:
11:34:39:959 Determining user folder on remote system...
11:34:39:959 Checking for existing installation of debugging tools...
11:34:39:959 Downloading debugger launcher...
11:34:39:959 Creating debugger installation folder: /home/lin/.vs-debugger
11:34:39:959 Failed: 无法创建或访问指定的目录 /home/lin/.vs-debugger。
11:34:39:959 参数名: path
11:34:39:959 Unable to find debugger script at '/home/lin/.vs-debugger'.
11:34:39:959 Failed: Unable to find debugger script at '/home/lin/.vs-debugger'.

那就是 VisualStudio 创建 .vs-debugger 文件夹失败

或提示 Failed: The specified directory /home/lin/.vs-debugger could not be created or accessed. 等信息

可使用以下方法解决。回到 UOS 命令行里面,退出 sudo su 状态,使用用户权限创建 ~/.vs-debugger 文件夹

exit

cd ~

mkdir .vs-debugger

以上的 exit 命令仅仅为了退出 sudo su 状态,如果你是新开的控制台,那请不要带上 exit 命令

完成以上命令之后,再次尝试在 VisualStudio 附加调试

预期能够看到正在启动调试适配器界面

看到此界面表示 VisualStudio 正在帮你部署调试环境,首次部署输入比较慢,大概需要在你的 UOS 下载 200MB 的内容

如果等太久,可以进入 ~/.vs-debugger 输入 du -sh 命令查看大小,就可以知道是否正在下载

接下来就进入到了咱熟悉的 VisualStudio 调试 .NET 应用的状态了

试试点击 VisualStudio 的暂停按钮,看看线程和堆栈

此调试方式配合 dotnet-campus 开源的 SyncTool 工具使用更好,通过 SyncTool 将 Windows 上的 VisualStudio 构建输出内容同步到 Linux 设备上,然后使用远程调试方式进行调试

详细请参阅 SyncTool 开源项目

UOS 开启 VisualStudio 远程调试 .NET 应用之旅的更多相关文章

  1. 开启Tomcat远程调试(转)

    原文链接:http://www.07net01.com/2016/11/1721293.html 如何远程调试tomcat 一,linux环境下 1. 服防火墙打开8000端口,允许外网访问:2. 修 ...

  2. 开启Java远程调试

    在JDK启动时,加入 -Xrunjdwp:transport=dt_socket,address=9900,server=y,suspend=n -Dcom.sun.management.jmxrem ...

  3. GS 服务器端开启webservice 远程调试的方法

    1. 修改 安装目录下 web.config的文件. 一般目录为: C:\Program Files\GenerSoft\bscw_local\web.config 为了保证安全想把文件备份一下. 2 ...

  4. 【Java】使用Eclipse进行远程调试,Linux下开启远程调试

    原博地址:http://blog.csdn.net/dfdsggdgg/article/details/50730311 1.center下,在startup.sh文件首行中添加如下语句 declar ...

  5. springboot开启远程调试

    远程调试maven设置 The run goal forks a process for the boot application. It is possible to specify jvm arg ...

  6. Java项目开启远程调试(tomcat、springboot)

    当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境apache-tomcat-8.5.16 Linux 如何启用 ...

  7. xdebug远程调试原理分析

    xdebug可以控制PHP程序的执行,这意味着xdebug可以在任何时候暂停或者恢复正在运行的PHP程序.当PHP程序被暂停的时候,xdebug可以获取到程序的有关 信息,比如变量的值等.xdebug ...

  8. weblogic远程调试XMLDecoder RCE CVE-2017-10271

    首先说一下远程调试的配置,首先在weblogic的启动文件加入如下配置,开启服务器远程调试端口就是9999: 第二步,建立一个java的空项目. 第三步将weblogic的所有jar包拷出来,放到一个 ...

  9. Idea进行java应用的远程调试Remote debugging

    本文可以解决如下两个问题: 1.如何处理和调试那些只发生在生产环境(或其他远程环境)而本地开发环境可能没办法重现的"问题". 2.只有一个可以部署的war/jar包,只有class ...

  10. 远程调试 Azure Web App

    当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...

随机推荐

  1. 网页端实现Excel转JSON

    1. 引言 有时工作中拿到的数据是Excel表格,要在前端网页上使用,通常需要把文件转为JSON 微软的Microsoft Excel没有导出为JSON的功能,其他的第三方网站又不太信任 开源的Exc ...

  2. 记录--用css画扇形菜单

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.效果图 用手机录屏再用小程序转换的gif,可能精度上有点欠缺. 2.实现过程 1.观察及思考 开始编码前我们首先观察展开后的结构:两个 ...

  3. .NET Emit 入门教程:第二部分:构建动态程序集(追加构建静态程序集教程)

    前言: 在本部分中,我们将深入探讨如何使用C# Emit 来创建动态程序集. 动态程序集是在运行时生成的,为我们提供了一种灵活.动态地构建和加载程序集的能力. 1. 程序集的概念 程序集是.NET中的 ...

  4. power quyer 批量合并同一文件夹下数据格式相同的Excel文件

    一.需求描述:现在有一批数据格式相同的Excel文件需要把里面的内容合并到同一个Excel的一个sheet里面 二.新建一个叫数据汇总的Excel文件-数据-新建查询-从文件-选择数据存放的文件夹-然 ...

  5. C# OpenCvSharp+ 微信二维码引擎实现二维码识别

    微信开源了其二维码的解码功能,并贡献给 OpenCV 社区.其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中.从 OpenCV 4.5.2 版本开始,就可以直接 ...

  6. archlinux开机出现错误Dependency failed for /home. Dependency failed for Local File System Time outwaiting for device /dev/disk/...

    错误如下 Dependency failed for /home. Dependency failed for Local File System Time outwaiting for device ...

  7. RabbitMQ 6种模式的练习,以及知识梳理

    常用的模式有Simple.Work.Fanout.Direct.Topic.Headers,可以通过设置交换机类型和配置参数来实现各个模式 简单模式(Simple) 工作模式(Work) 工作模式是考 ...

  8. #Tarjan,贪心#LOJ 3684 「COCI 2022.3」Usmjeravanje

    题目传送门 分析 可以发现题目实际上求的是最小强连通分量个数. 并且每个强连通分量必然是由最多两段区间 \(a_l\sim a_r,b_L\sim b_R\) 组成的 只要存在一条路 \(b_R-&g ...

  9. Discovery直播 | 移动应用“通行证”——钥匙环,解锁管家式安全出行服务

    用户在登录环节的直接诉求是:别让我等.别让我想.别让我烦.而帐号输入.繁琐验证,以及由此带来的安全风险,总会让很多人望而却步. 如何在简化登录流程的同时保障登录凭证安全?如何帮助用户一键免密登录同一开 ...

  10. django ORM 按月分组统计

    一.搭建环境,准备数据 1.1:新建项目 django-admin startproject Test 1.2:新建app python manage.py startapp app 1.3:设置 s ...