调试器gdb

1.启动和退出gdb

gdb调试的对象是可执行文件,而不是程序源代码。如果要使一个可执行文件可以被gdb调试,那么在使用编译器gcc编译程序时加入-g选项。-g选项告诉gcc在编译程序时加入调试信息,这样gdb才可以调试这个被编译的程序。

程序为求100内偶数和

#include<stdio.h>
int Sum(int a)
{
	int i = 0;
	if(a<1)
		return -1;
	for(a; a>2; a-=2)
	{
		i += a;
	}
	return i;
}
int main()
{
	int a = 100;
	printf("%d\n",Sum(a));
}

启动

gdb 程序文件名

示例

前面大段内容为版权信息,在启动gdb使用

gdb -q 程序文件名(等价于 gdb -q 换行  (gdb) file 程序文件名)即可去除版权信息文字

退出

(gdb)quit

2.显示和查找程序源代码

list :显示10行代码,再次运行则显示接下来的10行代码

list 3, 7:显示3到7行代码

list main.c :4, 10:显示源文件main.c的4到10行代码,在调试含有多个源文件的程序时使用

list Max:显示Max函数周围的代码

list test.c:Max: 显示源文件test.c中Max函数周围的代码,在调试含有多个源文件的程序时使用。

示例

如果要在调试时运行shell指令,则可以在gdb的提示符下输入shell命令

(gdb)shell gdb

search 字符串

forward 字符串

这俩命令都是从当前行向后查找第一个匹配字符串的

先前查字符串的命令为

reverse-search 字符串

3.执行程序和获得帮助

使用gdb -q test 或者file test只是装入了程序,程序并没有运行。如果程序要开始运行,在gdb提示符下输入run即可。

如果想了解gdb某个命令的用法,可以使用help命令。

(gdb)help list

4.设置和管理断点

为了在程序运行时查看变量的变化,或者某个中间表达式的值,需要程序在运行到某行停下时,设置断点即为最好的办法。

①以行号设置断点

在gdb里,大部分都是使用break命令为程序设置断点的。而指定断点时,最常用的即为为某行设置断点。例如

第二行是设置断点的反信息,1表示当前设置的是第一个断点,0x800066b是断点所在内存地址,file v.c,line 7表明断点设置在v.c文件的地起航处。

已经在第7行设置好了断点,我们试着运行下程序。

已暂停在断点处。

②以函数名设置断点

(gdb)break 函数名

③以条件表达式设置断点

break 行号或函数名 if 条件,例如

⑤查看当前所有断点

info breakpoints 

⑥使中断失效或者有效

使用“disable  断点号”命令可以使某个断点失效,程序运行到该点不会停下而是继续运行,使用“enable  断点号”命令可以让某个断点恢复有效。

⑦删除断点

clear  删除程序中所有断点

clear 行号  删除该行的断点

clear 函数名  删除该函数的断点

delete 断点号  删除指定编号的断点

注意到函数Sum()内有两个断点1和4,clear Sum 命令后,发现仅删除一个断点,即行数最小的断点

5.控制程序的执行

①continue 命令

让程序继续运行,直到下一个断点或者运行结束为止,命令格式为

continue

②kill 命令

该命令用于结束当前程序的调试,在gdb提示符下输入kill,gdb会询问是否退出当前程序的调试,输入y结束调试

③next和step命令

next和step命令相当于单步调试,使用next或者step命令一次一条执行该段代码。

next和step的区别在于,step遇到函数会跟踪进入函数内部,一次一条的执行该函数,直到函数内的代码执行结束,而next会把函数当作一条语句来执行。

使用step

使用next

④nexti和stepi命令

nexti和stepi命令用来单步执行一条机器指令,注意不是单步执行一行语句。

例如对Sum函数内的for循环来说

for(a; a>2; a-=2)

如果使用nexti或者stepi指令,需要输入多个nexti或者stepi才能执行完

nexti和next类似不会跟踪进入函数内部去执行,而stepi和step类似,会跟踪进入函数内部执行。

6.查看和设置变量的值

①print命令

print命令用来打印变量或表达式的值,也可以用来打印内存中某个变量从开始的一段内存区域的内容,还可以用来对某个变量进行赋值。使用格式为

print 变量或者表达式

print 变量=值

print 表达式@要打印的值的个数n

②whatis 命令

whatis 命令用来显示某个变量或表达式的数据类型,格式如下

whatis 变量或者表达式

③set命令

set命令可以给变量赋值,使用格式为

set variable 变量=值

这里再说一个set命令给主函数设置参数的命令

set args 字符串1 字符串2 字符串3 ......

gdb一些命令可以简写,如list可以用l替代,continue可以用cont替代

原文地址:https://www.cnblogs.com/area-h-p/p/10588971.html

时间: 2024-11-04 20:20:15

调试器gdb的相关文章

[转] linux下的c/c++调试器gdb

http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.html linux下的c/c++调试器gdb gdbLinux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: * 设置断点:* 监视程序变量的值:* 程序的单步执行:* 修改变量的值.       gdb支持下列语言C, C+

软件开发--调试器GDB

一.GDB介绍 A.GDB1.GNU项目中的调试器2.能够追踪程序的执行,也能够恢复程序崩溃前的状态B.GDB的重要性1.软件不是一次性开发完成的(是软件就有bug,是程序就有问题)2.调试时软件开发过程中不可或缺的技术C.GDB的常规应用1.自定义程序的启动方式(指定影响程序运行的参数)2.设置条件断点(在条件满足时暂停程序的执行)3.回溯检查导致程序异常结束的原因4.动态改变程序执行流(定位问题的辅助方式)D.GDB的启动方式1.直接启动--gdb ,gdb test.out ,gdb te

C语言调试器GDB和LLDB的使用方法

调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb testlib // 在main函数的位置打断点 b main dwarfdump testlib 可以直接查看debug信息 原文地址:https://www.cnblogs.com/fandx/p/12122933.html

使用GDB调试器(一)

使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长.尺有所短"就是这个道理. 一般来说.GDB主要帮忙你完毕以下四个方面的功能: 1.启动你的程序,能够依照你的自己定义的要求随心所欲的执行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.

使用GDB命令行调试器调试C/C++程序【转】

转自:https://linux.cn/article-4302-1.html 编译自:http://xmodulo.com/gdb-command-line-debugger.html作者: Adrien Brochard原创:LCTT https://linux.cn/article-4302-1.html译者: SPccman本文地址:https://linux.cn/article-4302-1.html 2014-11-25 21:48    评论: 31 收藏: 19 分享: 43

使用GDB命令行调试器调试C/C++程序

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的.幸好,linux下调试还是很方便的.大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB.然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握.这里,我会告诉你GDB的基本情况及使用方法. 安装GDB 大多数的发行版

GCC编译器和GDB调试器常用选项

http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                   #将hello.c编译成hello可执行文件 gcc -E hello.c -o hello.i              #将hello.c 转换成预处理后的文件hello.igcc -S hello.c -o hello.S              #将hello.c 转换成汇编文件 h

linux基础2——gdb调试器

gdb调试器使用的一般步骤(不断更新完善): 1.编译过程中要用-g参数来添加调试符号——gcc test.c -g: 2.gdb启动可执行文件——gdb a.out: 3.出现gdb符号表示启动成功: 4." l " (小写l)命令可以查看当前代码是否是要执行的代码: 5.断点 b 行号/函数名字——作用是程序执行过程中会自动在断点处暂停,等待指令 info b—— 查看断点列表 d 编号——删除指定编号的断点 6.执行程序 r 回车——程序启动,执行到代码中第一个出现断点处暂停 7

GDB 调试器使用手冊

使用GDB: 本文描写叙述GDB,GNU的原代码调试器. (这是4.12版1994年一月.GDB版本号4.16) * 文件夹: * 摘要: GDB的摘要 * 实例: 一个使用实例 * 入门: 进入和退出GDB * 命令: GDB 的命令 * 运行: 在GDB下运行程序 * 停止: 暂停和继续运行 * 栈: 检查堆栈 * 原文件: 检查原文件 * 数据: 检查数据 * 语言: 用不同的语言来使用GDB * 符号: 检查符号表 * 更改: 更改运行 * GDB的文件 文件 * 对象 指定调试对象 *