gdb自己总结.txt

来自「autoconf automake实例gcc编译java方法.txt」· 文本 代码 · 共 139 行

TXT
139
字号
1 help 命令
2 tab键的使用,1次,2次
3 查看源文件 list 搜索代码 search向前  reverse-search全部 指定源文件路径directory dir
4 程序运行 r/run
5 set and show and info usage
6 设置断点(breakpoint)
7 设置观察点(watchpoint) 与断点区别
8 设置捕捉点(catchpoint) 什么是捕捉点?
9 清除断点 delete、clear、disable、enable
10 修改断点条件 condition ignore
11 为停止点设定运行命令
12 断点菜单 同名函数,参数不同,选择那个函数
13 恢复运行单步调试 continue c setp s next finish untile u setpi/nexti(单步机器指令)
14 handle??? 信号(Signals)
15 多线程 定义断点是否在所有的线程上,或是在某个特定的线程?
16 查看栈信息 bt backtrace -n(n层栈) frame n up down
17 disassemble 可以查看源程序的当前执行时的机器码
18 查看运行时数据  表达式 程序变量 数组 输出格式 查看内存 自动显示 查看寄存器 
19 改变程序执行 修改变量值  跳转执行 产生信号量 强制函数返回 强制调用函数




基本gdb命令: 
---------------------------------------------------------------------
命令          简写         功能
---------------------------------------------------------------------
file                             装入想要调试的可执行文件. 
kill             k              终止正在调试的程序. 
list             l               列出产生执行文件的源代码的一部分. 
next           n              执行一行源代码但不进入函数内部. 
step          s              执行一行源代码而且进入函数内部. 
continue  c               继续执行程序,直至下一中断或者程序结束。
run            r               执行当前被调试的程序.
quit           q               终止 gdb.
watch                        使你能监视一个变量的值而不管它何时被改变. 
catch                         设置捕捉点.
thread       t               查看当前运行程序的线程信息.
break        b              在代码里设置断点, 这将使程序执行到这里时被挂起. 
make                        使你能不退出 gdb 就可以重新产生可执行文件. 
shell                         使你能不离开 gdb 就执行 UNIX shell 命令.  
print          p              打印数据内容。
examine  x               打印内存内容。
backtrace bt             查看函数调用栈的所有信息

 


一、设置断点(BreakPoint)

我们用break命令来设置断点。正面有几点设置断点的方法:

break
在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。

break
在指定行号停住。

break +offset
break -offset
在当前行号的前面或后面的offset行停住。offiset为自然数。

break filename:linenum
在源文件filename的linenum行处停住。

break filename:function
在源文件filename的function函数的入口处停住。

break *address
在程序运行的内存地址处停住。

break
break命令没有参数时,表示在下一条指令处停住。

break ... if
...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。

查看断点时,可使用info命令,如下所示:(注:n表示断点号)
info breakpoints [n]
info break [n]


二、设置观察点(WatchPoint)

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

watch
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch
当表达式(变量)expr被读时,停住程序。

awatch
当表达式(变量)的值被读或被写时,停住程序。

info watchpoints
列出当前所设置了的所有观察点。


三、设置捕捉点(CatchPoint)

你可设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:

catch
当event发生时,停住程序。event可以是下面的内容:
1、throw 一个C++抛出的异常。(throw为关键字)
2、catch 一个C++捕捉到的异常。(catch为关键字)
3、exec 调用系统调用exec时。(exec为关键字,目前此功能只在HP-UX下有用)
4、fork 调用系统调用fork时。(fork为关键字,目前此功能只在HP-UX下有用)
5、vfork 调用系统调用vfork时。(vfork为关键字,目前此功能只在HP-UX下有用)
6、load 或 load 载入共享库(动态链接库)时。(load为关键字,目前此功能只在HP-UX下有用)
7、unload 或 unload 卸载共享库(动态链接库)时。(unload为关键字,目前此功能只在HP-UX下有用)

tcatch
只设置一次捕捉点,当程序停住以后,应点被自动删除。

五、查看内存

你可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:
x/
n、f、u是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。
u参数可以用下面的字符来代替,
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节。
当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

表示一个内存地址。

n/f/u三个参数可以一起使用。例如:

命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?