GDB
来源:互联网 发布:linux拷贝当前目录 编辑:程序博客网 时间:2024/05/29 10:19
一、概要
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
二、gdb中常用命令
1.r:run 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。
(gdb) r
2.c:continue 程序碰到断点会暂停,按c程序继续,到下一个断点结束。
(gdb)c
3.b:breakpoint 设置断点,b后可加<函数名称>(b main)、<行号>(b number)、*<代码地址>(b *0x80003000)
d:删除断点,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。
4.s 相当于其它调试器中的“Step Into (单步跟踪进入)”。执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
(gdb)s
n 相当于其它调试器中的“Step Over (单步跟踪)”。执行一行源程序代码,此行代码中的函数调用也一并执行。
(gdb)n
5.si,ni。
si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。
(gdb)si ;(gdb)ni
6.p:(print)加 变量名称,打印这个变量的值
(gdb)p i
7.display …:display,设置程序中断后欲显示的数据及其格式。
例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
“display /i $pc”
其中 $pc 代表当前汇编指令,/i 表示以十六进行显示
(gdb) display /i $pc
8.q:quit 退出GDB调试环境。
(gdb) q
9.help加 [命令名称]:GDB帮助命令,提供对GDB名种命令的解释说明
(gdb) help s
三、实例
#include<stdio.h> void swap (int a ,int b) { int c; c=a; a=b; b=c; } int main (void) { int a=10; int b; swap (int a,int b); printf("a=%d b=%d\n"); }
在Linux环境下,vim中将此代码命名为swap.c
$gcc -g swap.c ##gcc后加 -g,使用参数 -g 表示将源代码信息编译到可执行文件中
$gdb a.out ##gdb环境下输出
接下来进入gdb(进入gdb后,最好显示程序行号“:+set nu”)
(gdb)b main ##在main函数处设置断点
(gdb)r #执行程序
(gdb)b 14 ##在20行设置断点(swap函数处)
(gdb)c ##程序在main断点处继续执行,到swap函数处停止
(gdb)p a ##打印a的值
(gdb)p &a ##打印a的地址
(gdb)s ##因为程序在swap处停了,所以s命令执行一行命令,即执行swap函数
上述命令演示如何进入gdb以及如何使用常用命令,gdb可以分段来检查程序的错误,非常实用。
- GDB
- gdb
- GDB
- GDB
- gdb
- GDB
- Gdb
- GDB
- gdb
- gdb
- GDB
- GDB
- gdb
- gdb
- gdb
- GDB
- gdb~~
- gdb
- JavaScript中的内置对象
- 饿了么webapp之1px边框
- Struts2两大验证
- 微信公众号开发--微信JS-SDK扫一扫功能 《二jsp》
- ORA-12514:TNS:listener does not currrntly... PL/SQL连接 win7 VMware上的oracle数据库出错
- GDB
- mysql5.6多实例配置
- 中英文 转 十六进制
- 38. Count and Say解题思路
- Serializable接口的作用性质
- 《我在故宫修文物》
- [线性代数]矩阵的初等变换与线性方程组
- Leetcode-Palindrome Number
- java基础(十)之深入剖析ThreadLocal