linux下gdb调试应用程序
来源:互联网 发布:银行卡网络异地消费 编辑:程序博客网 时间:2024/05/18 12:42
1. 简介
GDB,是GNU工程调试器,允许你去查看在程序运行的时候里边的东西,或者查看当程序crash的那一刻,其他程序正在做啥。为了获取行为中的bug,GDB可以做的主要有4件事:
- 开始你的程序,指定可能影响程序的任意行为
- 让你的程序停止在指定的条件下
- 检查你的程序停止时发生了什么
- 改变程序中的一些东西,然后可以查看改变的东西对一个bug和其他的影响
2. 开启图形化界面
【1】-tui 选项是这个界面的关键,-q表示的是不打印(gdb)之前的好多声明【2】此界面有好处也有坏处,好处是代码实时的显示在上边,会出也很明显,供操作显示的界面小了,如果你想打印出一个函数的反汇编,那他的劣势就很明显了
3. 基本操作(红色部分是简写)
3.1
list [linenum/function] -- 显示linenum周围的源代码或者是显示函数名function的函数的源代码
”list -” -- 显示当前行之前的固定行,固定行的重新设定可以用如下命令 set listsize [count],如果只是想看一下用show listsize就可以
"list +" -- 显示后边
list [first], [last] -- 显示从first到last行之间的代码
list ,[last] -- 从当前行到last之间的代码
start -- 开始调试程序,程序指针会指向main中的第一行
run -- 如果是这个,相对于start来说会找断点,停到断点出,如果没有断点,则执行完
next -- 但不执行下一行,如果遇到函数,不会进入函数执行
step -- 单步运行,如果有函数,进函数继续单步运行。如果后边跟数字,表示执行多步。
continue -- 继续执行,知道遇到断点
3.2 断点相关操作:
break <function> 在进入指定函数时停住
break <linenum> 在指定行号停住。
break +/-offset 在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum 在源文件filename的linenum行处停住。
break ... if <condition> ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环语境中,可以设置break if i=100,表示当i为100时停住程序。
delete 删除所有断点
delete breakpoint [n] 删除某个断点
disable breakpoint [n] 禁用某个断点
enable breakpoint [n] 使能某个断点
clear 清除所有断点
3.3 显示相关
自动显示观察的变量: -- 就是在每运行一次,都会有显示
display {a,b...}
删除显示的变量
undisplay {a,b...}
delete display {a,b....}
不删除,只是使能和屏蔽
disable display
enable display
dispay部分的格式控制同print中的格式控制一样
还有一种需求是,当每个变量只在他变化的时候显示:
watch{a,b...}
info 命令: -- 列出所有
info break :查看一共多少个break
info display:查看一共有多少个display
print 命令: -- 打印
打印出数组:
①动态数组
p *[数组首地址]@[数组中元素的长度
②静态数组
p [数组首地址]
输出时的格式控制
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
使用时是这个样子:p/a [你要打印的变量]
backtrace 命令: -- 打印堆栈(函数调用栈的所有信息)
简写是 bt
3.4 显示源代码的内存
你可以用info line命令来查看源代码在内存中的地址,他后边可以跟行号,函数名,这个命令会打印出所指定的源代码在运行时的内存地址。
你也可以查看源代码的当前执行的机器码,用disassemble命令会把目前内存中的指令dump出来,一般他后边跟的是行号,函数名。
- linux下gdb调试应用程序
- Linux下使用GDB调试应用程序示例
- Linux下gdb 调试应用程序与动态库
- linux应用程序调试gdb+gdbserver
- LINUX下GDB调试
- LINUX下GDB调试
- LINUX下GDB调试
- LINUX下GDB调试
- LINUX下GDB调试
- linux下gdb调试
- Linux下GDB调试
- LINUX下GDB调试
- LINUX下GDB调试
- LINUX下GDB调试
- Linux下GDB调试
- Linux 下GDB调试
- linux下GDB调试
- linux下GDB调试
- php 通过stomp协议连接ActiveMQ
- mysql or和in还有like的简单使用
- nyoj-Dinner
- 小胖威利症 哈尔滨男孩李航286斤 一不小心重名了
- Git记录
- linux下gdb调试应用程序
- hdu-2089 不要62【数位dp】
- WPF GridControl 数据绑定
- Android中关于布局填充器的各种详细用法和说明
- 关于switch语句-四则运算(c++)
- Hibernate的Session详解(transaction)
- 简单的Linux系统命令
- 对数几率回归Logistic Regression(Matlab)
- Android LinearLayout(7.1) 源码解析