如何使用vscode远程debug linux图形界面程序
Posted mingcc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用vscode远程debug linux图形界面程序相关的知识,希望对你有一定的参考价值。
如何使用vscode远程debug linux图形界面程序
X11规范与X-Forwarding
在Linux系统上,图形界面的显示由X11标准负责。该标准采用了C/S架构。具体而言,负责与硬件交互,绘制图形界面的部分为X Server,而应用程序则作为X Client与 X Server进行交互,将需要绘制的内容传递给X Server进行绘制。当然,一般的应用程序不会直接使用X Client与X Server进行通信,而是使用进一步封装好易于使用的图形界面库例如QT等。
当我们启动一台带有图形界面的Linux机器时,在启动阶段就会启动一个图形界面的X Server,这个X Server运行在本地,后续的其他应用程序所使用的X client也将运行在本地。此时如果打开终端,输入echo $DISPLAY
,将看到如下所示的输出:
~$ echo $DISPLAY
:11.0
这一环境变量的格式为HOST:D.S
,D表示Display编号,默认情况下表示X Server运行在6000+D
的TCP端口上,而S则是屏幕编号(同一个Display可能有多个Screen)。Host字段为空时默认为localhost,当然也可以使用远程的X Server的地址与端口,例如可以在Windows下运行一个VcXsrv
作为X Server。关于DISPLAY环境变量,更详细的说明可以参考(X11 - DISPLAY (environment variable)。
在使用SSH协议连接到远端服务器时,可以使用ssh -X
选项来开启X11-Forwarding
,这样会将远端的X Client请求都转发到本地的X Server来进行绘制。当然需要支持X11-Forwarding的SSH客户端,例如Moba-Xterm。
在使用了X-Forwarding
进行连接后,可以通过运行一个图形界面的时钟程序xclock
检查显示是否正常。
~$ xclock
如果一切正常,应该看到如下的时钟窗口。
如果使用了不支持X11-Forwarding
的客户端,则可能会输出如下的错误信息:
~$ xclock
Error: Can\'t open display:
相应的,此时查看$DISPLAY
变量的值也多半为空。
在Vscode中开启X11 Forwarding
方法1
可以通过第三方插件来在vscode中开启X11 Forwarding:
Remote X11 - Visual Studio Marketplace
Remote X11 (SSH) - Visual Studio Marketplace
安装如上两个插件后,在vscode自带的Terminal中运行xclock
应该可以看到图形化的时钟界面。并且,此时在终端中应该可以可以正确输出$DISPLAY
环境变量的值。
~$ echo $DISPLAY
localhost:11.0
但是这时仍然无法使用gdb插件调试带有图形界面的程序:vscode内建的终端与其用于运行调试程序的进程并不共享同样的环境变量,还需要使用另一个vscode插件environment-injector设置DISPLAY
环境变量。
environment-injector - Visual Studio Marketplace
安装好该插件后,按F1
或者Ctrl + Shift + P
呼出vscode的命令面板,输入Inject environment variable
,然后在后续的窗口中分别输入环境变量DISPLAY
的变量名和上一步在终端中输出的变量值如localhost:11.0
即可。
设置完成后,再启动debug就可以正确地看到图形界面的显示了。
reference: Issue #41 · joelspadin/vscode-remote-x11 · GitHub
方法2
使用微软提供的Remote -SSH
插件以及X Server程序例如VcXsrv。
前提条件:可以通过目标服务器访问本机IP地址,即至少从服务器Ping本机有响应。
-
安装Remote-SSH插件:
-
配置远程连接:
主要是添加如下选项:
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes -
安装并启动VcXRV
启动时选择一个Display Number,并需要在后续界面中勾选
Disable access control
。 -
启动vscode并连接到服务器即可,应该可以看到
DISPLAY
变量已经被设置好了,如果没有,则需要设置为VcXrv中所指定的Display Number,例如localhost:10.0
。
如果远端服务器无法主动访问本机ip,则该方法不可用。
reference: windows - VS code remote x11 cant get DISPLAY while connecting to remote server - Stack Overflow
Win10中使用VSCode + Remote-SSH + Linux服务器远程开发
参考技术A VSCode + Remote-SSH + Linux服务器远程开发VSCode新增加一个 Remote-SSH 插件,它可以用来打开Linux服务器上的的文件夹!!!
VSC 通过 Remote Development 插件连接上远程服务器,然后打开服务器上的文件夹作为 workspace 。无需将服务器上的各种头文件和源码拷贝到本地上,我们就能使用包括 IntelliSense (completions) 、 code navigation 及 debugging 在内的各种功能。最后,我们还能使用编辑器内置的终端操纵服务器,去做一些 build、release 这样的事情.
安装Win10系统, 默认系统会安装 OpenSSH , 如果本地机器没有装, 需要专门安装一下, 注意这里需要安装 OpenSSH-Client 客户端. 并且在Windows中 powershell 中使用 ssh-keygen.exe 生成一对公私钥, 存储在 C:\Users\brownfeng\.ssh\ 文件夹中, 具体步骤如下
具体步骤:
本机操作环境:Windows 10 1909(此版本的系统自带SSH)
远程机器环境: Ubuntu18.04
常规插件安装如下:
其他的配置使用 Ctrl+Shift+P ,选自 setting(JSON)
这里远程机器可以是使 VirtualBox 中安装的 ubuntu18.04 , 也或者是同一个网络中的其他Linux机器. 并且Linux机器上需要如下配置:
在Windows机器上打开VSCode, 然后点击界面最左边的 Remote-SSH , 然后点击点击左上方 CONNECTION 窗口中的蓝字 Configure ,并选择包含 .ssh\config 的配置文件, 并且在配置文件中填入:
此时已经在VSCode中重启打开窗口,远程连接上了Linux中的内容.
https://zhuanlan.zhihu.com/p/100759746
https://blog.csdn.net/sixdaycoder/article/details/89850064
https://blog.csdn.net/maokelong95/article/details/91801944
https://www.zhihu.com/question/30315894/answer/928959062
https://www.baidu.com/link?url=2S1ImETasuzCgi_1SzolRpvTlC-9g5Ma2jTPd7kTez834S-GicesjpUbJIK-Z9I9&wd=&eqid=dbdfd12f00056500000000055e3fe011
以上是关于如何使用vscode远程debug linux图形界面程序的主要内容,如果未能解决你的问题,请参考以下文章
tvm在linux环境下的安装与编译及vscode如何配置tvm的远程连接调试环境
tvm在linux环境下的安装与编译及vscode如何配置tvm的远程连接调试环境
tvm在linux环境下的安装与编译及vscode如何配置tvm的远程连接调试环境