简单了解gdb
gdb是UNIX及UNIX-like下用于调试程序的调试工具,它的功能非常强大,在Windows下调试多了的程序员会对gdb这样的调试工具感觉非常的不熟悉,但是在Unix下,它应该是最好的调试工具了。
gdb主要功能
- 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
- 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
- 当程序被停住时,可以检查此时你的程序中所发生的事。
- 你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
gdb下的主要的几个命令
| 命令 | 解释 | 例子 |
|---|---|---|
| r/run | 运行当前调试程序 如果遇到断点就在断点处停下,没有断点则直接跑完程序 | (gdb) r test |
l/list | 列出源代码,从上次列出的位置接着往下列 list + 行号 以该行号为中心显示 list +行号,行号,显示两个行号之间的代码 list +其他文件:行数,显示另一文件的某一行 | (gdb) l (gdb) l 10 (gdb) l 10,15 (gdb) l test.h:1 |
| file | 加载被调试的可执行程序文件 | (gdb) file test |
| c/continue | 继续程序的执行,直至下一个断点或程序结束 | (gdb) c |
b 行号 b 函数名称 b *地址 b 行号 +条件 d 编号 | 给第几行标注断点 给某个函数开始处标注断点 给某个地址标注断点,用于没有源文件时 条件断点,如果条件成立给某行标注断点 给断点标号 | (gdb) b 6 (gdb) b main (gdb) b *0xffffffff (gdb) b 8 if a==8 (gdb) d |
s,n si,ni | s:执行一行源程序代码,若该代码有函数则进入该函数(逐语句) n:执行一行源程序代码,若该行代码有函数调用一并执行,不进入函数(逐过程) si和ni相当于汇编语言下的s和n | (gdb) s (gdb) n |
| p/F 变量名 | 显示指定变量的值,可以是临时变量或者是全局变量。F是打印的格式 x-16进制,d-有符号十进制,u-无符号十进制,f-浮点格式 | (gdb) p/x i |
display ... undisplay 编号 | display,用于显示表达式的值,每当程序运行到断点处都会显示表达式的值 undisplay + display 编号 用于结束某个表达式值的显示 | (gdb) display a (gdb) undisplay 3 |
| i/info | 用于显示各类信息,具体的可以用help i来查看,下面有讲到一些 | (gdb) i r |
| watch | 当运行run后,你想知道哪些值在运行中被改变了 | (gdb) watch expresstion |
| kill | 终止正在调试的程序 | (gdb)kill |
| shell | 执行shell命令 | (gdb)shell ls |
| until 行数 | 运行到函数某一行 | (gdb)until 3 |
| finish | 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值以及参数信息 | (gdb)finish |
常用的info用法
| info+参数 | 用法 |
|---|---|
| info break | 查看断点信息 |
| info args | 查看当前函数的参数 |
| info stack | 查看调用堆栈 |
| info source | 查看当前源文件信息 |
| info display | 查看所有要显示的表达式的值 |
关于断点的几个用法
| 参数 | 用法 |
|---|---|
| disable 断点号 | 关闭断点 |
| enable 断点号 | 打开断点 |
| enable once 断点号 | 开启一次 |
| enable delete 断点号 | 开启一次后删除 |
| delete 断点号 | 删除断点 |
| clear | 清除当前行的断点 |
| c/continue | 继续执行程序,直到下一个断点处 |
关于数据的几个用法
| 命令 | 用法 |
|---|---|
| display+表达式 | 用于显示表达式的值,每当程序运行到断点处都会显示表达式的值 |
| info display | 用于显示当前所有要显示值的表达式情况 |
| delete display + 编号 | 用于删除一个要显示的值 |
| disable/enable display+编号 | 使要显示的一个表达式的值失效/开启 |
| undisplay +编号 | 用于结束某个表达式的显示 |
| whatis+变量 | 用于显示变量类型 |
| set 变量=变量值 | 用于改变程序中某个变量的值 |
本文介绍gdb——一种强大的UNIX及UNIX-like系统下的程序调试工具。gdb支持启动程序、设置断点、检查变量等功能。文章详细列举了gdb的主要命令及其用法,帮助读者快速上手。
689

被折叠的 条评论
为什么被折叠?



