本文目录一览:
深度linux V20如何安装gdb,如何用gdb调试程序、用gdb设置断点删除断点、gdb自动显示变量值、看内存值?
因本人通过几个小时的时间才解决这个问题,希望我的答案能节省大部分初学者在gdb上的时间。我也是今天才接触gdb,以下是有关深度linux V20的gdb调试问题的初步总结:
安装gdb方式,sudo apt-get install gdb ,有ok点击ok安装,直到安装结束。
gcc -g aa.c之后才能调试a.out文件。(aa.c表示你的源文件)
用法gdb a.out或者gdb进入后file a.out
l N是查看N行附近的代码,直接l是显示接下去的代码。r运行过程中遇到断点,按l则显示断点附近代码。
l 函数名是查看函数名里边的代码
q退出调试。
p 变量,查看变量即时值。
r运行。
n单步执行。
s单步执行-进入函数。
c连续多步运行,直到下个断点(循环的下一次断点)暂停。
b N第N行设置断点。
b 函数名,在函数名的入口处设置断点。
b 文件名:行号,在指定文件名行号设置断点。其中文件名是源文件的文件名。
(条件断点)b 行号 if 变量==N,表示该行号的断点必须满足变量==N的条件下才停下来。
ignore 断点编号 N,表示该断点编号在接下来的运行过程中忽略N次,即第N+1次该断点才会停下来。
info break显示全部断点。简写i b
delete 1-3删除编号为1到3的断点。简写 d 1-3。d 4只删除编号为4的断点。
delete break删除所有断点。无法简写
clear 20删除20行断点。
运行中disable break n 禁用断点号为n的断点。enable break n 使能断点为n的断点号重新启用。其中break可以简写为b
display {var1,var2,var3}自动显示var1~3变量的值。要删除display则用delete display N,N表示display的编号,如果不加N则表示删除全部的display。如果要自动显示数组内容,用display 数组名。注意:display需要r之后才能设置。-gdb多文件断点
watch {var1,var2,var3}自动跟踪改变的值,只要有改变才显示watch。要删除watch,用d N,N代表watch编号,用i b可以查看该编号。注意:watch需要r之后才能设置。-gdb多文件断点
gdb死循环程序按键盘ctrl+c可结束程序
****************
要查看内存地址的内容用x /nfu 内存地址。以下是n、f、u的解释
其中n表示要显示多少个内存单元。
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
*****************
gdb断点怎么实现的
2009年12月29日,程序调试工具 GDB 7.0.1 发布,新版本修正了7.0版本的一些严重的堆栈溢出bug,这些bug可能导致 GDB 调试进程中断,修正了在 FreeBSD 和 IRⅨ 系统下无法编译的问题,增加了对 Thumb2调试的支持,还有其他一些小bug的修复。-gdb多文件断点
2010年03月19日,GDB 7.1 发布,
详细改进内容:多程序调试的支持;
位置独立的可执行文件(派)调试的支持;
新的目标(包括一个模拟器):Xilinx MicroBlaze和瑞萨RX;
Python支持增强;
c++支持扩展;
新tracepoint功能;
过程记录的改进;
远程协议扩展。
2010年09月06日 ,GDB 7.2 发布,
该版本改进记录:
⒈ 支持D语言
⒉ C++ 改进,支持参数依赖查找ADL,静态常量类成员和改进了用户自定义操作符的支持
⒊ Python 调试的改进,包括断点、符号、符号表、程序空间、线程等可通过命令行进行操作
⒋ Furthermore,enhancements were made for tracepoints and for GDBserver.在跟踪点和GDB程序上有了改善。
⒌ 支持 ARM Symbian 平台
⒍ 其他方面的改进和bug修复。
2011年08月26日,GDB 7.3a 发布,
变化:
1。GDB可以理解线程的名字。
2。这个命令”线程名称”(指定一个名称)和“线程找到[REGEXP]”(匹配名称、目标ID,或者额外的信息)被添加。
3。Python脚本支持是大大增强。
4。在c++的支持,异常处理是提高,模板参数放在范围在一个实例化时调试。
5。线程调试的核心转储在GNU / Linux成为可能。
6。最初支持C语言版本的OpenCL。
7。许多其他改进。
如何在gdb上指定线程和指定参数打断点
可以使用gdb命令,调试多线程。
在调试的过程中,
可以输入命令:thread这是会列出多个线程的进程号。
然后你可以选择进入哪个线程进行调试。
只要输入:thread 线程进程号就可以了。
同单线程调试的方法没有多大区别。
请自己查看help命令。