前言
学习,dash即Debian系统中sh指向的系统程序,目标是学习vscode远程调试c程序的手法。
源码下载
根据p牛讲述的方法,可以在command-not-found找到命令对应的包,再在Ubuntu Packages中搜索包名得到对应包的下载地址,就可以下载到源码:
然后解压并用Vscode打开就可以开始阅读源码了。
环境搭建
启动虚拟机,准备好源码,首先允许autogen脚本,遇到问题:
aclocal: not found
似乎是由于没有安装automake导致的,安装一下:
sudo apt-get install automake
再次运行,目录下生成了configure程序,然后准备编译安装一个用于调试的dash程序,类似编译用于调试的PHP,需要加上-g参数用于添加调试信息和prefix参数避免对系统原有环境造成影响:
./configure --prefix=/home/aluvion/桌面/docker/dash-0.5.11/run CFLAGS="-g"
最后编译安装生成命令程序dash:
make && make install
简单测试一下:
接下来动态调试代码有两种选择,第一种是分离源码阅读和调试,在vscode里面看源码,在Linux里用gdb动态调试。第二种就是按照vscode拓展,直接在vscode里进行动态调试,如这篇文章所讲的ssh+gdb的调试方法。
首先需要在虚拟机中安装好sshd:
sudo apt-get install openssh-server
然后启动:
service sshd start
并且在主机powershell上测试一下ssh连接:
然后安装vscode的ssh扩展remote ssh:
装上去之后连接ssh,
可以通过配置SSH主机选项修改用户目录下的ssh文件,加上host和username的配置:
Host remoteVM
HostName 192.168.88.129
User aluvion
然后连接ssh,就可以直接打开远程主机上的源码文件夹了,然后在项目文件夹下面新建.vscode文件夹和launch.json文件,然后添加配置gdb launch:
随便下个断点,然后修改launch.json配置:
{
"configurations": [
{
"type": "cppdbg",
"request": "launch",
"name": "GDB",
"program": "${workspaceFolder}/run/bin/dash",
"stopAtEntry": true,
"args": ["-c", "id"],
"cwd": "${fileDirname}",
"environment": [],
"MIMode": "gdb",
}
]
}
最后启动调试,调试环境搭建完成: