学习调试Linux命令程序

前言

学习,dash即Debian系统中sh指向的系统程序,目标是学习vscode远程调试c程序的手法。


源码下载

根据p牛讲述的方法,可以在command-not-found找到命令对应的包,再在Ubuntu Packages中搜索包名得到对应包的下载地址,就可以下载到源码:

然后解压并用Vscode打开就可以开始阅读源码了。

环境搭建

启动虚拟机,准备好源码,首先允许autogen脚本,遇到问题:

1
aclocal: not found

似乎是由于没有安装automake导致的,安装一下:

1
sudo apt-get install automake

再次运行,目录下生成了configure程序,然后准备编译安装一个用于调试的dash程序,类似编译用于调试的PHP,需要加上-g参数用于添加调试信息和prefix参数避免对系统原有环境造成影响:

1
./configure --prefix=/home/aluvion/桌面/docker/dash-0.5.11/run CFLAGS="-g"

最后编译安装生成命令程序dash:

1
make && make install

简单测试一下:

接下来动态调试代码有两种选择,第一种是分离源码阅读和调试,在vscode里面看源码,在Linux里用gdb动态调试。第二种就是按照vscode拓展,直接在vscode里进行动态调试,如这篇文章所讲的ssh+gdb的调试方法。

首先需要在虚拟机中安装好sshd:

1
sudo apt-get install openssh-server

然后启动:

1
service sshd start

并且在主机powershell上测试一下ssh连接:

然后安装vscode的ssh扩展remote ssh:

装上去之后连接ssh,

可以通过配置SSH主机选项修改用户目录下的ssh文件,加上host和username的配置:

1
2
3
Host remoteVM
HostName 192.168.88.129
User aluvion

然后连接ssh,就可以直接打开远程主机上的源码文件夹了,然后在项目文件夹下面新建.vscode文件夹和launch.json文件,然后添加配置gdb launch:

随便下个断点,然后修改launch.json配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"configurations": [
{
"type": "cppdbg",
"request": "launch",
"name": "GDB",
"program": "${workspaceFolder}/run/bin/dash",
"stopAtEntry": true,
"args": ["-c", "id"],
"cwd": "${fileDirname}",
"environment": [],
"MIMode": "gdb",
}
]
}

最后启动调试,调试环境搭建完成:


参考

vscode的远程开发与调试——以C/C++为例

我是如何利用环境变量注入执行任意命令


学习调试Linux命令程序
http://yoursite.com/2023/10/24/学习调试Linux命令程序dash/
作者
Aluvion
发布于
2023年10月24日
许可协议