GDB命令自动补充和常见命令的使用
命令的自动补全
GDB中支持命令的自动补充,包括补全命令(显示出完整格式的命令)和列举命令所有参数的候选项。使用时需要双击 Tab 键。1.对于补全完整的命令格式来说,如果存在有且只有一个可能的命令,那么命令就会被自动补全。例如:
(gdb) info bre<TAB>
双击 TAB 键就会补全剩余的部分,因为 info 子命令中只有 breakpiont 以‘bre’开头:(gdb) info breakpiont
如果存在候选项不止一个,那么就会列举出所有可能的命令候选项。例如:
(gdb) con <Tab>
(gdb) con
condition continue
(gdb) catch <TAB> //双击TAB键,候补的选项不止包含一个,会把可能的选项列举出来。
(gdb) catch
assert exception fork load signal throw vfork
catch exec handlers rethrow syscall unload
常见的命令的使用
下面介绍的命令都是我们在程序调试阶段经常使用的,下面的都是对这些命令做一些简单的介绍,后面会有更加详细的介绍。1.查看源码使用 list 命令,使用方式展示如下:
list
使用 list 命令就可以查看源程序的代码,默认显示 10 行。命令缩写为 l。2.设置断点使用到 break 命令,调试程序基本上都是在程序的运行阶段,使用这个命令可以使程序产生中断,方便我们调试。使用方式展示如下:
break (breakpoint) //若没有参数则停在下一条指令处
break filename : [location] //在源文件 filename 的 location 处停住,location 可以表示源文件的某一行,函数名或者是一个地址。
break [location] if [condition] //条件判断,在条件成立时设置中断,condition 表示条件。
info break
3.设置观察点,使用到命令 watch ,观察点一般观察某个表达式的值是否发生变化,如果有变化,会马上停住程序。使用方式展示如下:watch [expression] //expression 表示一个表达式
4.运行程序使用到 run 命令,使用方式展示如下:run app [argv1] [argv2] ...
run命令后跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<>)和通配符(*,?,[])在内。5.打印变量信息使用到 print 命令,使用方式展示如下:
print /format //format 表示的是打印输出的格式。
格式符号如下:x:将数据作为整数数据,并以十六进制打印。
d:打印带符号整型数据
u:打印以无符号整形数据
o:以八进制打印整型数据
t:以二进制打印整形
a:打印地址,打印16进制的绝对地址和最近符号的偏移量。可以用这个格式找出一个未知地址位于何处,找到函数地址,实例:
(gdb) print /a 0x123456
$3 = 0x123456<_initialize_vx + 369>
finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息
continue [ignore-count] :恢复程序运行,直到程序结束或是下一个断点到来。ignore-count 表示忽略其后的断点次数。continue,c,fg三个命令意思相同。
step:一行一行执行,遇到函数时,调到函数内运行
next:一行一行执行,遇到函数时,调过函数运行,不会进入函数。
quit
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算