在CentOS上调试GCC编译的程序,需先安装GCC编译器(用于生成可执行文件)和GDB调试器(用于调试程序)。若系统未安装,可通过以下命令安装:
# 安装GCC和GDB(CentOS 7及以上)
sudo yum install gcc gdb
若需要更高版本的GCC(如GCC 8),可通过Devtoolset安装(以devtoolset-8为例):
# 添加devtoolset-8仓库
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-8
# 启用devtoolset-8(临时生效)
scl enable devtoolset-8 bash
安装完成后,可通过gcc --version和gdb --version验证安装是否成功。
使用GCC编译程序时,必须添加**-g选项**,该选项会在可执行文件中嵌入源代码的符号信息(如函数名、变量名、行号),使GDB能关联源代码与二进制代码。例如:
gcc -g -o my_program my_program.c
注意:避免同时使用高优化级别(如-O2、-O3),因为优化会改变代码结构,导致调试信息与实际执行的代码不一致,影响调试准确性。
启动GDB调试程序的命令为:
gdb ./my_program
进入GDB交互界面后,常用命令如下:
break main # 在main函数开头设置断点
break 10 # 在第10行设置断点
break my_function # 在自定义函数处设置断点
run # 简写为`r`
next(简写n):执行下一行代码,不进入函数内部(适用于跳过库函数调用)。step(简写s):执行下一行代码,进入函数内部(适用于调试函数逻辑)。print variable_name # 简写为`p`,如`p a`查看变量a的值
info locals # 查看当前函数的局部变量
continue # 简写为`c`
backtrace # 简写为`bt`
quit # 简写为`q`
info threads # 显示所有线程信息(如线程ID、状态)
thread 2 # 切换到线程ID为2的线程
ldd命令查看程序依赖的共享库,确保库文件路径正确:ldd ./my_program
core文件(需开启系统核心转储功能),可使用GDB加载程序和核心文件,分析崩溃原因:gdb ./my_program core
在GDB中,通过bt命令查看崩溃时的调用栈,定位问题代码。除GDB外,CentOS还提供以下工具辅助调试:
valgrind --leak-check=full ./my_program
gcc -pg -o my_program my_program.c # 编译时添加-pg选项
./my_program # 运行程序生成gmon.out文件
gprof my_program gmon.out > analysis.txt # 生成性能分析报告