介绍一下在服务器或容器内使用vscode远程编译调试C++的方法。
首先使用指令运行镜像,为了后面vscode进行ssh调试,预留一个2001的端口映射
sudo run docker -p 2001:22 images
进入镜像内部安装openssh-server wget curl
apt-get update
apt-get install openssh-server wget curl
完成安装后打开ssh配置文件,允许ssh登录root权限
vim /etc/ssh/sshd_config
更改UsePAM yes
添加PermitRootLogin yes
保存退出,重新启动ssh服务
service ssh restart
更改登录密码
passwd
这时你需要使用ssh端口映射登录你的容器,在本地
ssh -p 2001 root@host
如果显示的主机名是你的容器名,那就登录成功了。有时会遇见登陆不成功的情况,
第一确保端口映射和登录端口是同一个,
第二重启ssh服务,
第三apt-get update和apt-get upgrade。
再有问题重启容器,再进行以上步骤。
现在配置本地的vscode
打开vscode后搜索扩展插件C/C++和remote-ssh 并进行安装。
输入ssh指令和端口号。ssh root@hostname -p 2001
或者点击SSH TARGETS的配置文件打开第一个config文件,在文件中进行配置
保存后在SSH TARGETS下的你的host后面会有,点击会打开新窗口显示连接,输入你的ssh密码会连接上。
有时会显示连接出错Failed to parse remote port from server output,像这样。
从网上搜索的原因是容器内的vscode-server出现问题,需要关闭重启。有几种解决方法,可以挨个试一下。
1、ctrl+shift+p调出指令窗,搜索选择Remote-ssh:Uninstall vscode-server from host..来删除容器端的vscode-server
2、在容器内的root里会有.wget-hsts 删除他重新连接。
3,、重启ssh
service ssh restart
4、如果添加了国内的apt源,把apt源换成官方的。
5、apt-get update和apt-get upgrade
5、重启容器。
以上方法也不保证有效,有时候上面方法试过后需要等一会儿。
vscode进入容器后,打开会指定workspace位置。直接连接到你要debug的示例下。再次输入密码。
在插件库中再次搜索C/C++,插件的描述页面会让你在容器端再次安装。点击再次安装。
现在需要两个文件来进行debug,tasks.json编译工程和launch.json来运行debug。
首先创建tasks.json:
Ctrl+shift+p搜索Tasks:Run Task->配置任务->使用模板创建->others。然后把下面代码替换进去
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "make",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
主要看“command” 后面跟的是README中编译指令
在Makefile中添加一行
CFLAGS += -g
来确保编译后可以调试。
然后创建launch.json:
选择C++(GDB/LLDB) 如果没有这个选项,在插件添加页面找到C/C++在ssh重新加载。然后会提醒刷新窗口,再次添加launch.json 就有会出现C++(GDB/LLDB)。
打开launch.json 更改这几项
以终端运行 app -c config.txt为例
“programe”指向你的可执行文件“${workspaceFolder}/app”
“args” 你的运行参数每个空格用,隔开["-c","config.txt"]
然后保存。使用ctrl+shift+B 来执行编译。
编译完成后打开调试界面
就可以设置断点监视变量参数了。