gdb调试器的学习:
一、概述
gdb主要帮助用户完成一下4方面的功能:
1 启动程序,可以按照用户自定义方式启动程序。
2 可以设置断点来调试程序。
3 程序停止时,可以查看此时程序的状态。
4 动态改变程序的执行环境。
二、使用gdb
1 程序编译
需要gcc使用-g参数来把调试信息加到可执行文件中。
如:gcc -g hello.c -o hello
2 启动gdb
启动gdb的方法:
3 退出gdb
退出gdb的方法:
quit
4 gdb命令概貌
a help [command] 查看命令帮助
b 输入命令时,如果前几个字母能唯一的确定一个命令,则不用完全输入整个命令。
c 输入命令的过程中,可以按俩次TAB键补全命令,如果有重复的,gdb会全部列出来。
5 gdb中运行shell程序
shell
6 设置程序运行参数
set args 可以指定运行时参数。
如:set args 10 20 30
7 暂停恢复程序运行
a 设置断点
在函数入口处设置断点:
break
C++中指定类成员函数断点:
break
C++中指定重载函数断点:
break
在指定行号处设置断点:
break
在指定文件的行号处设置断点:
break
在指定文件的函数入口设置断点:
break
在指定条件成立时暂停执行:
break if
查看断点:
info break
info break [n]
b 设置观察点
watch
为表达式设置观察点,表达式的值发生变化时暂停执行
rwatch
为表达式设置观察点,表达式被读时暂停执行
awatch
为表达式设置观察点,表达式被读或写时暂停执行
info watchpoints
查看所有观察点
c 设置捕捉点
catch
当event发生时,停住程序
event 事件可以是:
throw
catch
exec
fork
vfork
load
load
unload
unload
8 维护停止点
clear
清除所有已定义的停止点
clear
clear
清除所有设置在函数上的停止点
clear
clear
清除所有设置在指定行上的停止点
delete [breakpoints] [range...]
删除指定断点,breakpoints为断点号,range表示断点号范围,如:3-7.
disable [breakpoints] [range...]
使指定的断点无效
enable [breakpoints] [range...]
使指定的断点生效
condition
修改断点号为bnum的停止条件为expression
condition
清除断点号为bnum的条件
9 恢复程序运行和单步调试
continue
c
恢复程序执行,知道程序结束或遇到下一个断点
step
单步跟踪,会进入函数调用
next
n
单步跟踪,不会进入函数调用
finish
运行程序,知道当前函数完成返回
until
u
运行程序知道退出循环体
10 查看栈信息
backtrace
bt
打印当前函数调用栈的所有信息
11 查看源程序
list
显示程序第linenum行周围的源程序
list
显示函数function的源程序
list
显示文件filename的第linenum行周围的源程序
list
显示文件filename的函数function的源程序
list
显示当前行后面的源程序
list -
显示当前行前面的源程序
set listsize
设置一次显示源代码的行数
show listsize
查看当前listsize 的设置
list ,
显示从first到last行之间的源代码
12 查看运行时数据
print
打印表达式expr
print /
按f格式打印表达式expr
f:
x 十六进制格式
d 十进制格式
u 十六进制格式显示无符号正式
o 八进制格式
t 二进制格式
a 十六进制格式显示变量
c 字符格式
f 浮点数格式
print
print
查看文件或函数中的变量
如:
print 'f2.c'::x
查看文件f2.c中的变量x
print
打印动态数组,array为数组首地址,len为数组长度
print array
打印静态数组,array为数组名
13 改变程序的执行
print x=4
设置当前环境下的x的值为4
set var width=47
设置当前环境下的width的值为47,避免变量名是gdb参数的情况
jump
指定下一条语句的运行点
如:
jump file:line
return
return
强制函数立即返回,expression为返回值
call
print
强制调用函数,并显示返回值,如果函数返回为void,则不显示。
阅读(1646) | 评论(0) | 转发(0) |