以下是:
从CSDN的网站上找到的GDB使用说明。
原文标题:用GDB调试程序
作者:haoel (QQ是:753640,MSN是: haoel@hotmail.com )
关键字:gdb 调试 c c++ gun
这篇文章非常好,所以摘录并进行改进以收藏。
源代码如下所示:
(gdb) list
1 /* it will result in SIGSEGV */
2 int sub(int a,int b,int c){
3
4 *(int *)a=16;
5 return 0;
6 }
7
8 int main()
9 {
10 int a=0;
(gdb)
11 int b=1;
12 int c=2;
13 sub(a,b,c);
14 return 0;
15 }
16
(gdb) disassemble main
Dump of assembler code for function main:
0x000000000040050b <main+0>: push %rbp
0x000000000040050c <main+1>: mov %rsp,%rbp
0x000000000040050f <main+4>: sub $0x10,%rsp
0x0000000000400513 <main+8>: movl $0x0,-0xc(%rbp)
0x000000000040051a <main+15>: movl $0x1,-0x8(%rbp)
0x0000000000400521 <main+22>: movl $0x2,-0x4(%rbp)
0x0000000000400528 <main+29>: mov -0x4(%rbp),%edx
0x000000000040052b <main+32>: mov -0x8(%rbp),%esi
0x000000000040052e <main+35>: mov -0xc(%rbp),%edi
0x0000000000400531 <main+38>: callq 0x4004ec <sub>
0x0000000000400536 <main+43>: mov $0x0,%eax
0x000000000040053b <main+48>: leaveq
0x000000000040053c <main+49>: retq
可以使用help break/watch/catch获取帮助信息。
一,断点的设置
意义: 例子:
进入函数时停止 break main
指定行号停止 break 8
当前行的offset处停止 break +2
break -2
某个源文件的某行处停止 break test.c:8
某个源文件的某个函数处停止 break test.c:main
内存地址处停止 break *(0x000000000040050b)
下一行停止 break
某一个条件下停止 break 12 if a==0
break 12 if b!=0
查看断点的统计信息,包括hit上的数目等 info break
info break 2
二,观察点的设置
意义: 例子:
表达式/变量的变化则停止 watch a
watch a+b
当表达式/变量被读时停止 rwatch a
rwatch a+b
当表达式/变量的值被读或者写时停止 awatch a
awatch a+b
查看观察点 info watchpoints
三,捕捉点的设置
意义: 例子:
捕捉一个C++抛出的异常 catch throw
捕捉一个C++捕捉到的异常 catch catch
仅设定一次捕捉,之后自动删除 tcatch catch/throw
四,捕捉点的维护
意义: 例子:
清除所有停止点 clear
清除某个函数上的停止点 clear main
clear test.c:main
清除指定行号上的停止点 clear 10
clear test.c:10
清除指定断点 delete (所有断点)
delete 2(断点号)
delete 2-7(断点号2-7)
关闭指定断点 disable(所有断点)
disable2(断点号)
disable 2-7(断点号2-7)
开启指定断点 enable(所有断点)
enable 2(断点号)
enable 2-7(断点号2-7)
开启指定断点1次 enable once 2(断点号)
enable once 2-7
开启指定断点1次 ,之后删除 enable delete 2(断点号)
enable delete 2-7
五,停止条件维护
意义: 举例:
修改某个断点的条件 condition 1 a!=1
清除某个断点的条件 condition 1
忽略停止条件指定次数 ignore 1 2(忽略2次)
六,为停止点设定运行命令
这有利于自动化调试
意义: 举例:
指定停止点执行数个命令 break foo if x>0
commands
printf "x is %d\n",x
continue
end
设置停止点后,紧跟着设定commands
commands 1(停止点号)
printf "x is %d\n",x
continue
end
给指定停止点号,设置commands。
清除 commands 1(停止点号)
end
清除指定停止点的commands
七,函数重载的影响
如果函数名字相同,可以使用告知参数类型的方式,和gdb提示,自己再选择的方式指定。
八,信号
UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是
Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状
态改变信号; SIGKILL表示终止程序运行的信号,等等。信号量编程
是UNIX下非常重要的一种技术。
意义: 例子:
查看gdb如何处理某个信号 handle SIGIO SIGKILL
handle SIGKILL
指定gdb如何处理某个信号 handle SIGIO SIGKILL stop(关键字)
handle SIGKILL print(关键字)
关键字: nostop
当被调试的程序收到信号时,GDB不会停住程序的运行,但会打出消息告诉你收到这种信号。
stop
当被调试的程序收到信号时,GDB会停住你的程序。
print
当被调试的程序收到信号时,GDB会显示出一条信息。
noprint
当被调试的程序收到信号时,GDB不会告诉你收到信号的信息。
pass
noignore
当被调试的程序收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程序会处理。
nopass
ignore
当被调试的程序收到信号时,GDB不会让被调试程序来处理这个信号。
查看有哪些信号在被GDB info signals
检测中及其处理 info handle
九,搜索源代码
意义: 举例:
向前搜索 forward-search mai*(正则表达式)
search mai*(正则表达式)
全面搜索 reverse-search mai*(正则表达式)
十,指定源文件路径
意义: 举例:
指定源文件路径 dir /root/mylinuxc
指定多个源文件路径 dir /root/mylinuxc :/root/mylinuxc/src
清除自动以路径 directory
查看定义的源文件搜索路径 show directories
十一,查看数组
意义: 例子:
查看数组地址和数组的项大小的数组 int *array = (int *) malloc (len * sizeof (int));
print *array@len
如果是静态数组的话,可以直接用print数组名,就可以显示数组中所有数据的内容了。
十二,自动显示
意义: 例子:
自动显示对应指令的汇编代码 display/i $pc
查看自动显示 info display
删除指定显示号的自动显示 undisplay 1(自动显示号)
delete display 1 2
delete display 1-2
分享到:
相关推荐
为了调试汇编语言程序,需要使用-gstabs参数重新编译代码,以便生成可调试的可执行文件。 ``` as -gstabs -o cpuid.o cpuid.s ld -o cpuid cpuid.o ``` 然后,可以使用GDB调试器来调试程序: ``` gdb cpuid ``` ...
GDB(GNU调试器)是这个调试器的核心,它是开源社区广泛使用的C/C++程序调试工具。 首先,让我们深入了解QT Creator。QT Creator是一款集成开发环境(IDE),由QT公司开发,用于编写QT应用程序。它集成了编辑器、...
在给定的标题和描述中,重点提到了 "qtcreator-gdb-7.4-MINGW32_NT-6.1-i686",这表明我们关注的是 Qt Creator 中用于调试的 GDB(GNU Debugger)版本,特别适用于基于 MINGW32(Minimalist GNU for Windows)的环境...
【使用GDB调试程序】 GDB(GNU Debugger)是一款强大的开源调试工具,广泛用于调试C和C++程序。在Ubuntu系统中,通过GDB可以深入理解程序的运行过程,定位和修复bug。以下是对GDB调试程序的详细介绍: 1. **程序...
在IT行业中,调试是软件开发过程中的重要环节,特别是在Linux环境下,GDB(GNU Debugger)作为一款强大的命令行调试工具,被广泛应用于C/C++等语言的程序调试。本篇文章将详细阐述GDB的使用方法及其核心功能,帮助你...
在这个特定的压缩包“qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar”中,包含的是适用于32位Windows系统(MINGW32)的QT Creator调试器,针对的是NT 6.1内核,即Windows 7操作系统。 调试器是开发过程中的关键工具,...
GDB,全称为GNU调试器(GNU Debugger),是一款强大的命令行调试工具,广泛应用于UNIX类操作系统,包括Linux。它的主要作用是对C、C++等语言编写的程序进行调试,帮助开发者定位并修复代码中的错误。GDB是开源的,由...
在调试程序时,GDB 提供了许多有用的功能,例如,可以使用 `next` 命令来单步执行程序,可以使用 `print` 命令来显示变量的值,可以使用 `continue` 命令来继续执行程序。 GDB 的调试示例中,使用了一个简单的 C ...
GDB 是一款强大的开源调试器,用于C、C++以及其他支持的语言,它允许程序员在程序运行时检查和控制程序的状态,从而进行调试和问题排查。 描述中的“配置 Eclipse C 平台是要用到的 GDB”意味着 GDB 是在使用 ...
GDB调试器(gdb-7.0.2)是一款由GNU开源组织提供的强大调试工具,主要用于在UNIX系统以及类似环境中调试C和C++程序。...通过学习和实践,开发者能够更好地应对复杂的程序调试挑战,提高软件的质量和可靠性。
GDB服务程序可以是运行在主机或仿真器上的程序,负责加载和控制被调试的程序。在交叉开发环境下,GDB不能直接调试目标平台的程序,所以需要这样的服务程序。 调试Bootloader(如U-BOOT)和内核时,通常需要一个运行...
描述中提到的"gdb-7.6.1-1-mingw32-bin.tar"是GDB(GNU调试器)的一个版本,它是用于调试C、C++以及其他语言程序的强大工具。GDB 7.6.1是一个较旧但仍然功能齐全的版本,可以与MingW环境很好地配合,帮助开发者在源...
【描述】"QtCreator 的调试器 qtcreator-gdb-7.4-MINGW32_NT-6.1-i686" 指出这个软件包是Qt Creator的一个组成部分,主要功能是调试器。调试器是开发过程中的关键工具,它允许开发者在运行代码时检查变量状态、设置...
### GDB调试程序知识点 #### 一、GDB概述 - **定义**: GDB(GNU Debugger)是一款由GNU项目开发的开源调试工具,主要用于调试C、C++等语言编写的程序。 - **特点**: - 命令行界面:用户通过命令行交互的方式来控制...
标题中的"gdb-7.3.1-1-mingw32"指的是GNU调试器(GDB)的一个特定版本,这是用于C、C++和其他语言的开源调试工具。GDB允许程序员在执行代码时检查程序状态,定位和修复错误。这里的“7.3.1-1”是版本号,而“mingw32...
GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行时检查和控制程序,对于排查代码错误、理解程序执行流程以及优化性能有着至关重要的作用。 首先,我们要理解GDB的基本概念。GDB是一...
详细并且全面的GDB入门,易理解。 内容: 一、 GDB概述 二、系统认识GDB 三、GDB的命令概貌 ...六、调试已运行的程序 七、查看栈信息 八、查看源程序 九、查看运行时数据 十、查看寄存器 十一、改变程序的执行
安装MinGw报错无法下载gdb-7.6.1-1-mingw32-bin.tar.lzma 。可以下载这个文件,把其中解压出来的gdb.exe放在MinGw/bin目录下即可。注意解压lzma文件需要使用特殊软件,如:“7-zip”。
可以打印map,vector等 只要 source stl-views-1.0.3.gdb
本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...