一、GDB的概述
Linux包含了一个叫gdb的GUN调试程序。gdb是一个用来调试C和C++程序的强有力调试器。他使你能在程序运行时观察程序的内部结构和内存的使用情况。它具有以下一些功能:
1.监视程序中变量的值;
2.设置断点以使程序在指定的代码行上停止执行;
3.一行行的执行代码。
二、GDB常用命令
三、GDB调试编译代码
为了使gdb正常工作,必须使你的程序在编译时包含调试信息。在编译时用-g选项打开调试选项
四、gdb常用命令使用
装入调试文件:1.gdb a.out
2.gdb
file a.out
查看源代码list或l
(gdb)list 不指定行号,随机列出行号
(gdb)list 20 显示第20行周围的内容,一般时前后各一半
(gdb)list 2,16 显示从第2行到第16行
运行命令run或r
(gdb)run 运行程序
下一步next或n
(gdb)next 下一步
单步执行step或s
(gdb)step 下一步
继续运行continue
(gdb)continue 下一步
首行开始start
(gdb)start 重新开始
五、断点操作
设置断点通常要结合list查看代码行号,设置成功后,使用ru'n命令运行程序避免断点设置在空行或注释行上。
(gdb)break 4
(gdb)run
指定行设置断点
(gdb)break add
(gdb)run
指定函数前设置断点
使用表达式设置断点
(gdb)break 12 if i==9
(gdb)run
(gdb)info locals
显示当前gdb断点信息info break:查看当前断点信息
(gdb)info break
删除断点delete breakpoint或d
删除断点号n的断点
(gdb)d break 1
禁止或启用断点enable或disable
清除断点clear
观察点watch
1.设置断点
(gdb)b 9
2.运行
(gdb)run
3.设置观察点
(gdb)watch i==3
4.continue继续,等待条件满足触发中断
查看数据
查看变量值peint或p:查看某个变量的值
自动显示变量display:当程序运行停住时,自动显示变量值
其他命令
结束当前函数运行finish:当gdb进入某个函数后使用命令finish退出当前函数
结束当前for循环jump:在gdb进入某个循环后,使用命令跳到第n行,(注意;最好在同一函数内jump,不能超过本函数,否则肯会出错
查看变量类型ptype:查案谋变量的类型
列出当前程序存活的栈帧bt:随着函数调用而在stack上开辟的一篇内存空间。用于存放函数调用时产生的局部变量和临时变量
根据栈帧编号,切换栈帧frame:frame n 根据显示存活的栈帧编号n,切换到栈帧n