安装gdb:yum install -y gdb
使用gdb:
gcc 默认产生release模式,动态链接
gcc -o 目标文件 源文件 -g
使用readelf -S 可执行文件名 ,读取可执行文件格式
readelf -S 可执行文件名 | grep -i debug <选择debug信息>
gdb 调试:debug 运行时调试;看到代码
进入命令行调试 | gdb 可执行文件名 | |
退出调试模式 | quit | |
gdb会记录前一条语句,回车执行 | ||
看到所有代码list | l 1(l +行号:显示指定行代码) enter 下一页 | |
F5运行 | r 回车 | |
给某行打断点breakpoint | b 文件名:行号/函数名 | |
查看所有断点 | info b![]() | |
删除断点 | d 断点编号 d :删除所有断点 重新进入gdb,全删除breakpoint | |
断点使能 | disable 编号:是断点变成隐藏 Enb为 n enable 编号:使得断点开启 Enb为y | |
运行到下一断点 | c | |
局部调试 | ||
局部变量的内容和地址 | p 变量:显示变量的内容 | |
display 变量/取地址:长显示变量 undisplay 变量编号:关闭长显示变量 | ||
设置变量值 | set var 变量名=值value《改运行分支》 | |
看到栈帧(栈结构的) | bt | |
单步进行 | 逐语句F11 step | s |
逐过程F10 next | n | |
进入函数 | s | |
运行完当前函数 | finish | |
运行到指定行 | until 行号 | |
调试的本质 | 找到问题《调试》(断点对半范围查找,逐行查找,大到小) 需要懂得代码逻辑 解决问题(阅读上下文代码,三方结合,找到原因) |