Linux——常用命令以及gdb调试工具
·
在 Linux 开发环境中,熟练掌握常用命令与 GDB 调试工具是每一个 C/C++ 开发者的基础能力。本文将结合实际代码案例,介绍 Linux 常见命令的使用,以及如何利用 GDB 对程序进行调试。
一、Linux 简介
什么是 Linux?
Linux 是一种开源操作系统,广泛应用于:
- 服务器
- 云计算
- 嵌入式开发
- 后端开发
- 高性能计算
目前绝大多数互联网服务器都运行在 Linux 系统之上。
二、Linux 文件系统结构
Linux 的目录结构采用树形结构,一切皆文件。
Linux 目录结构示意图
/
├── home 用户目录
├── root 管理员目录
├── etc 配置文件
├── usr 用户程序
├── bin 常用命令
├── dev 设备文件
├── tmp 临时文件
└── var 日志文件
三、Linux 常用命令
1. pwd —— 查看当前路径
功能
显示当前所在目录。
命令格式
pwd
输出:
/home/user/project
图文理解
当前所在位置
↓
/home/user/project
2. ls —— 查看目录内容
功能
查看当前目录下的文件。
常用参数
| 参数 | 作用 |
|---|---|
| -l | 显示详细信息 |
| -a | 显示隐藏文件 |
| -h | 人性化显示大小 |
示例
ls
ls -l
ls -la
输出理解
-rw-r--r-- 1 root root 1200 test.cpp
含义:
| 字段 | 说明 |
|---|---|
| rw- | 文件拥有者权限 |
| r-- | 用户组权限 |
| r-- | 其他用户权限 |
3. cd —— 切换目录
功能
进入指定目录。
示例
cd /home
返回上一级:
cd ..
进入用户主目录:
cd ~
目录切换流程图
/home
↓ cd user
/home/user
↓ cd project
/home/user/project
4. mkdir —— 创建目录
示例
mkdir test
递归创建:
mkdir -p a/b/c
5. touch —— 创建文件
touch main.cpp
6. rm —— 删除文件
删除文件
rm test.txt
删除目录
rm -r dir
强制删除
rm -rf dir
⚠️ 注意:
rm -rf /
属于危险命令,会删除系统文件。
四、文件查看命令
1. cat —— 查看文件内容
示例
cat test.txt
2. less —— 分页查看
示例
less log.txt
适合查看大型日志文件。
3. tail —— 查看日志尾部
示例
tail -f log.txt
日志实时查看流程
程序运行
↓
日志写入 log.txt
↓
tail -f 实时刷新输出
五、Linux 权限管理
1. chmod —— 修改权限
示例
chmod 755 app
权限数字含义
| 数字 | 权限 |
|---|---|
| 4 | 读 |
| 2 | 写 |
| 1 | 执行 |
755 权限理解
7 = 4+2+1 = rwx
5 = 4+1 = r-x
5 = 4+1 = r-x
即:
拥有者:可读可写可执行
用户组:可读可执行
其他人:可读可执行
六、进程管理命令
1. ps —— 查看进程
示例
ps aux
查找指定进程:
ps aux | grep nginx
2. top —— 动态查看系统状态
top
类似 Windows 任务管理器。
3. kill —— 结束进程
kill 1234
强制结束:
kill -9 1234
七、GCC 编译工具
编写测试代码
// main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello Linux!" << endl;
return 0;
}
编译程序
g++ main.cpp -o app
运行程序
./app
输出:
Hello Linux!
GCC 编译流程图
main.cpp
↓
g++
↓
app 可执行文件
↓
运行程序
八、GDB 调试工具
什么是 GDB?
GDB 是 Linux 下常用的程序调试工具。
它可以帮助开发者:
- 设置断点
- 单步调试
- 查看变量
- 分析崩溃原因
- 查看函数调用栈
九、GDB 调试案例
1. 编写测试程序
#include <iostream>
using namespace std;
int add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int x = 10;
int y = 20;
int result = add(x, y);
cout << result << endl;
return 0;
}
2. 添加调试信息编译
g++ test.cpp -g -o test
⚠️ -g 参数用于生成调试信息。
3. 启动 GDB
gdb ./test
十、GDB 常用命令
| 命令 | 作用 |
|---|---|
| break / b | 设置断点 |
| run / r | 运行程序 |
| next / n | 单步执行 |
| step / s | 进入函数 |
| print / p | 查看变量 |
| continue / c | 继续运行 |
| list / l | 查看源码 |
| quit / q | 退出 |
十一、GDB 调试流程
1. 设置断点
(gdb) b main
2. 运行程序
(gdb) r
程序停在断点:
Breakpoint 1, main ()
3. 单步执行
(gdb) n
4. 查看变量
(gdb) p x
输出:
$1 = 10
5. 进入函数
(gdb) s
进入:
int add(int a, int b)
GDB 调试流程图
启动 GDB
↓
设置断点
↓
运行程序
↓
程序停在断点
↓
单步调试
↓
查看变量
↓
定位 Bug
十二、程序崩溃调试案例
空指针错误代码
#include <iostream>
using namespace std;
int main()
{
int *p = NULL;
cout << *p << endl;
return 0;
}
运行结果
Segmentation fault
使用 GDB 分析
启动:
gdb ./test
运行:
(gdb) r
程序崩溃:
Program received signal SIGSEGV
查看调用栈
(gdb) bt
崩溃分析流程图
程序运行
↓
访问空指针
↓
发生段错误
↓
GDB 捕获异常
↓
定位崩溃代码
更多推荐




所有评论(0)