Linux进阶之调试与故障排查
调试与故障排查是 Linux 系统管理和开发的重要组成部分。本章将详细讲解使用 GDB 进行程序调试的技巧,以及常见系统故障的排查方法,包括核心命令和示例。
一、使用 GDB 进行程序调试
1、GDB 概述
GDB(GNU Debugger)是 Linux 中的强大调试工具,用于调试 C/C++ 程序,支持断点设置、变量跟踪、单步执行等功能。
2、GDB 的安装
在 Debian/Ubuntu 系统中:
sudo apt install gdb -y
在 CentOS/RHEL 系统中:
sudo yum install gdb -y
验证安装:
gdb --version
3、GDB 的基本使用
编译程序以支持调试
在编译时添加 -g
选项生成调试符号:
gcc -g -o example example.c
运行 GDB
使用以下命令加载程序:
gdb ./example
常用 GDB 命令
以下是一些常用命令及其说明:
- 运行程序:
run
- 设置断点:
break <行号>
或break <函数名>
- 显示变量值:
print <变量名>
- 单步执行:
step
(进入函数)或next
(跳过函数) - 继续执行:
continue
- 退出调试:
quit
示例
假设调试以下程序 example.c
:
#include <stdio.h>
int main() {
int a = 10, b = 0;
printf("Result: %d\n", a / b); // Intentional error
return 0;
}
使用 GDB 调试:
- 启动 GDB:
gdb ./example
- 设置断点:
break main
- 运行程序:
run
- 检查变量:
print a
- 发现错误位置并修改代码。
二、常见系统故障排查技巧
1、系统资源不足
问题描述
系统性能下降,可能由 CPU、内存、I/O 或网络资源不足引起。
解决方法
- 使用
top
查看资源占用:top
- 使用
iotop
查看 I/O 情况:iotop
- 使用
free
查看内存使用情况:free -h
示例
假设 free -h
输出如下:
total used free shared buff/cache available
Mem: 8.0G 6.5G 1.0G 0.2G 0.5G 1.3G
如果可用内存过低,需考虑释放缓存或扩展内存。
2、系统启动故障
问题描述
系统无法正常启动,可能由于引导配置错误、文件系统损坏等原因。
解决方法
- 进入恢复模式:启动时按
Esc
或Shift
进入 GRUB,选择恢复模式。 - 检查 GRUB 配置:
cat /boot/grub/grub.cfg
- 修复文件系统:
fsck /dev/sda1
3、网络连接问题
问题描述
无法连接到网络或特定主机。
解决方法
- 使用
ping
测试连通性:ping 8.8.8.8
- 检查路由配置:
ip route show
- 查看 DNS 配置:
cat /etc/resolv.conf
示例
如果 ping
显示网络不可达,需检查网关或接口状态:
ip link show
4、文件系统满载
问题描述
系统报错 “No space left on device”。
解决方法
- 检查磁盘使用情况:
df -h
- 查找大文件:
find / -type f -size +500M
示例
如果发现 /var/log
占用过多空间,可以使用 logrotate
压缩旧日志。
三、小结
通过本章学习,你掌握了以下内容:
- GDB 调试:定位程序错误,排查运行时问题。
- 系统故障排查:涵盖资源不足、启动问题、网络故障和磁盘满载等场景。