`

用GDB调试程序--调试器GDB常用功能(进阶级)

阅读更多

以下是:


从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

分享到:
评论

相关推荐

    GDB调试--以汇编语言为例

    为了调试汇编语言程序,需要使用-gstabs参数重新编译代码,以便生成可调试的可执行文件。 ``` as -gstabs -o cpuid.o cpuid.s ld -o cpuid cpuid.o ``` 然后,可以使用GDB调试器来调试程序: ``` gdb cpuid ``` ...

    QT程序调试器——qtcreator-gdb-7.4-MINGW32_NT-6.1-i686

    GDB(GNU调试器)是这个调试器的核心,它是开源社区广泛使用的C/C++程序调试工具。 首先,让我们深入了解QT Creator。QT Creator是一款集成开发环境(IDE),由QT公司开发,用于编写QT应用程序。它集成了编辑器、...

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686 QtCreator 的调试器

    在给定的标题和描述中,重点提到了 "qtcreator-gdb-7.4-MINGW32_NT-6.1-i686",这表明我们关注的是 Qt Creator 中用于调试的 GDB(GNU Debugger)版本,特别适用于基于 MINGW32(Minimalist GNU for Windows)的环境...

    用GDB调试程序 - Ubuntu中文1

    【使用GDB调试程序】 GDB(GNU Debugger)是一款强大的开源调试工具,广泛用于调试C和C++程序。在Ubuntu系统中,通过GDB可以深入理解程序的运行过程,定位和修复bug。以下是对GDB调试程序的详细介绍: 1. **程序...

    用GDB调试程序(整理有书签).pdf

    在IT行业中,调试是软件开发过程中的重要环节,特别是在Linux环境下,GDB(GNU Debugger)作为一款强大的命令行调试工具,被广泛应用于C/C++等语言的程序调试。本篇文章将详细阐述GDB的使用方法及其核心功能,帮助你...

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar QT4 调试器

    在这个特定的压缩包“qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar”中,包含的是适用于32位Windows系统(MINGW32)的QT Creator调试器,针对的是NT 6.1内核,即Windows 7操作系统。 调试器是开发过程中的关键工具,...

    用GDB调试程序--对GDB介绍的比较详细。

    GDB,全称为GNU调试器(GNU Debugger),是一款强大的命令行调试工具,广泛应用于UNIX类操作系统,包括Linux。它的主要作用是对C、C++等语言编写的程序进行调试,帮助开发者定位并修复代码中的错误。GDB是开源的,由...

    用GDB调试程序 用GDB调试程序

    在调试程序时,GDB 提供了许多有用的功能,例如,可以使用 `next` 命令来单步执行程序,可以使用 `print` 命令来显示变量的值,可以使用 `continue` 命令来继续执行程序。 GDB 的调试示例中,使用了一个简单的 C ...

    gdb-7.2-1-mingw32

    GDB 是一款强大的开源调试器,用于C、C++以及其他支持的语言,它允许程序员在程序运行时检查和控制程序的状态,从而进行调试和问题排查。 描述中的“配置 Eclipse C 平台是要用到的 GDB”意味着 GDB 是在使用 ...

    GDB调试器(gdb-7.0.2)

    GDB调试器(gdb-7.0.2)是一款由GNU开源组织提供的强大调试工具,主要用于在UNIX系统以及类似环境中调试C和C++程序。...通过学习和实践,开发者能够更好地应对复杂的程序调试挑战,提高软件的质量和可靠性。

    Linux Insight配置GDB调试U-BOOT.doc

    GDB服务程序可以是运行在主机或仿真器上的程序,负责加载和控制被调试的程序。在交叉开发环境下,GDB不能直接调试目标平台的程序,所以需要这样的服务程序。 调试Bootloader(如U-BOOT)和内核时,通常需要一个运行...

    mingw-get-setup.exe以及gdb-7.6.1-1-mingw32-bin.tar

    描述中提到的"gdb-7.6.1-1-mingw32-bin.tar"是GDB(GNU调试器)的一个版本,它是用于调试C、C++以及其他语言程序的强大工具。GDB 7.6.1是一个较旧但仍然功能齐全的版本,可以与MingW环境很好地配合,帮助开发者在源...

    qtcreator-gdb-7.4-MINGW32_NT-6.1-i686

    【描述】"QtCreator 的调试器 qtcreator-gdb-7.4-MINGW32_NT-6.1-i686" 指出这个软件包是Qt Creator的一个组成部分,主要功能是调试器。调试器是开发过程中的关键工具,它允许开发者在运行代码时检查变量状态、设置...

    GDB调试程序文档

    ### GDB调试程序知识点 #### 一、GDB概述 - **定义**: GDB(GNU Debugger)是一款由GNU项目开发的开源调试工具,主要用于调试C、C++等语言编写的程序。 - **特点**: - 命令行界面:用户通过命令行交互的方式来控制...

    gdb-7.3.1-1-mingw32

    标题中的"gdb-7.3.1-1-mingw32"指的是GNU调试器(GDB)的一个特定版本,这是用于C、C++和其他语言的开源调试工具。GDB允许程序员在执行代码时检查程序状态,定位和修复错误。这里的“7.3.1-1”是版本号,而“mingw32...

    GDB调试程序[陈皓]&GDB调试工具指南

    GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行时检查和控制程序,对于排查代码错误、理解程序执行流程以及优化性能有着至关重要的作用。 首先,我们要理解GDB的基本概念。GDB是一...

    GDB调试程序-入门级

    详细并且全面的GDB入门,易理解。 内容: 一、 GDB概述 二、系统认识GDB 三、GDB的命令概貌 ...六、调试已运行的程序 七、查看栈信息 八、查看源程序 九、查看运行时数据 十、查看寄存器 十一、改变程序的执行

    gdb-7.6.1-1-mingw32-bin.tar.rar

    安装MinGw报错无法下载gdb-7.6.1-1-mingw32-bin.tar.lzma 。可以下载这个文件,把其中解压出来的gdb.exe放在MinGw/bin目录下即可。注意解压lzma文件需要使用特殊软件,如:“7-zip”。

    gdb调试 stl views

    可以打印map,vector等 只要 source stl-views-1.0.3.gdb

    GDB--gdb调试.pdf

    本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...

Global site tag (gtag.js) - Google Analytics