https://www.gnu.org/software/gdb/documentation/
断点所在行不执行
使用 GDB 调试某个可执行文件,该文件中必须包含必要的调试信息(比如各行代码所在的行号、包含程序中所有变量名称的列表(又称为符号表)等),而上面生成的 可执行文件 则没有。
gcc -g
值得一提的是,GCC 编译器支持 -O(等于同 -O1,优化生成的目标文件)和 -g 一起参与编译。GCC 编译过程对进行优化的程度可分为 5 个等级,分别为 O0~O4,O0 表示不优化(默认选项),从 O1 ~ O4 优化级别越来越高,O4 最高。
所谓优化,例如省略掉代码中从未使用过的变量、直接将常量表达式用结果值代替等等,这些操作会缩减目标文件所包含的代码量,提高最终生成的可执行文件的运行效率。
b/r/q/l/p/c/n
break/run/quit/list/print/continue/next
使用 gdb 调试多进程程序 —— 以调试 nginx 为例 (qq.com)
出现问题
1 Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-127.el8.x86_64
步骤
sudo vim /etc/yum.repos.d/CentOS-Linux-Debuginfo.repo
enable=1
sudo yum install glibc
sudo yum install yum-utils
sudo debuginfo-install glibc
使用步骤
- GDB启动程序
- 设置断点
- 查看变量并检查
- 正确则重复2、3步
- 错误则修改代码后在当前断点前的代码,重复2、3步
- 直至程序运行完成
GDB调试指南 | 守望的个人博客 (yanbinghu.com) GDB调试入门指南 - 知乎 (zhihu.com)