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 Documentation (gnu.org)

使用 gdb 调试多进程程序 —— 以调试 nginx 为例 (qq.com)

出现问题

1 Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-127.el8.x86_64

步骤

  1. sudo vim /etc/yum.repos.d/CentOS-Linux-Debuginfo.repo

enable=1

  1. sudo yum install glibc
  2. sudo yum install yum-utils
  3. sudo debuginfo-install glibc

使用步骤

  1. GDB启动程序
  2. 设置断点
  3. 查看变量并检查
  4. 正确则重复2、3步
  5. 错误则修改代码后在当前断点前的代码,重复2、3步
  6. 直至程序运行完成

GDB调试指南 | 守望的个人博客 (yanbinghu.com) GDB调试入门指南 - 知乎 (zhihu.com)