gdb手册

合集下载

GDB完全手册

GDB完全手册

GDB完全手册GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

所谓“寸有所长,尺有所短”就是这个道理。

用GDB调试程序1 GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。

让我们一一看来。

2 一个调试示例——————源程序:tst.c1 #include <stdio.h>23int func(int n)4 {5int sum=0,i;6for(i=0; i<n; i++)7{8 sum+=i;9 }10return sum;11 }121314 main()15 {16 int i;17 long result = 0;18for(i=1; i<=100; i++)19 {20result += i;21 }2223 printf("result[1-100] = %d n", result );24 printf("result[1-250] = %d n", func(250) );25 }编译生成执行文件:(Linux下)hchen/test> cc -g tst.c -o tst使用GDB调试:hchen/test> gdb tst <---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty"for details. This GDB was configured as "i386-suse-linux"...(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

GDB使用手册

GDB使用手册

在执行 symbol-file 一次之后,如果按下回车键,它并不会重复执行。
When GDB is configured for a particular environment, it understands debugging information in whatever format is the standard generated for that environment; you may use either a GNU compiler, or other compilers that adhere to the local conventions. Best results are usually obtained from GNU compilers; for example, using gcc you can generate debugging information for optimized code.
从 filename 中读符号表信息。同样地根据需要查找 PATH。使用 file 命令从同一文件得到符号表和要运行的程序。
symbol-file with no argument clears out GDB information on your program's symbol table.
symbol-file 没有参数时,清除 GDB 中的程序的符号表信息。
The symbol-file command causes GDB to forget the contents of some breakpoints and auto-display expressions. This is because they may contain pointers to the internal data recording symbols and data types, which are part of the old symbol table data being discarded inside GDB.

gdb技术手册(中文版)

gdb技术手册(中文版)

gdb技术手册(中文版)2-12008-11-13 19:20:59| 分类:学习资料| 标签:|字号大中小订阅gdb技术手册(中文版)2 (2008-10-29 20:34:21)标签:杂谈一、查看源程序一、显示源代码GDB可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。

不然就看不到源程序了。

当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。

你可以用list命令来打印程序的源代码。

还是来看一看查看源代码的GDB命令吧。

list<linenum>;显示程序第linenum行的周围的源程序。

list<function>;显示函数名为function的函数的源程序。

list显示当前行后面的源程序。

list -显示当前行前面的源程序一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。

set listsize <count>;设置一次显示源代码的行数。

show listsize查看当前listsize的设置。

list命令还有下面的用法:list<first>;,<last>;显示从first行到last行之间的源代码。

list ,<last>;显示从当前行到last行之间的源代码。

list +往后显示源代码。

一般来说在list后面可以跟以下这们的参数:<linenum>; 行号。

<+offset>; 当前行号的正偏移量。

<-offset>; 当前行号的负偏移量。

<filename:linenum>; 哪个文件的哪一行。

<function>; 函数名。

<filename:function>;哪个文件中的哪个函数。

gdb使用手册

gdb使用手册

gdb使用手册摘要:1.GDB 简介2.GDB 的基本功能3.GDB 的安装与配置4.GDB 的基本使用方法5.GDB 的高级功能6.GDB 的常见问题与解答正文:【GDB 简介】GDB(GNU Debugger)是一款功能强大的调试工具,主要用于C/C++程序的调试。

GDB 可以帮助程序员查找代码中的错误,理解程序运行时的状态,并对程序进行性能分析。

GDB 作为GNU 计划的一部分,遵循GPL 协议,是开源的软件。

【GDB 的基本功能】GDB 主要包括以下基本功能:1.断点设置:可以在程序中设置断点,使程序在执行到断点时暂停。

2.运行控制:可以控制程序的运行,包括继续执行、单步执行、跳过函数调用等。

3.变量查看:可以查看程序运行时的变量值,包括全局变量、局部变量和栈上的临时变量。

4.函数调用栈查看:可以查看程序运行时的函数调用栈。

5.内存管理:可以分析程序的内存使用情况,查找内存泄漏等问题。

【GDB 的安装与配置】GDB 的安装相对简单,一般可以通过操作系统的包管理器进行安装。

以Ubuntu 系统为例,可以使用以下命令安装GDB:```sudo apt-get install gdb```安装完成后,需要配置GDB 的环境变量,将GDB 的安装路径添加到PATH 环境变量中。

具体操作如下:```export PATH=$PATH:/usr/local/gdb```【GDB 的基本使用方法】GDB 的基本使用方法如下:1.启动GDB:在终端中输入“gdb”命令,然后回车。

2.载入程序:使用“file”命令载入需要调试的程序。

例如:“file/path/to/your/program”。

3.设置断点:使用“break”命令在指定位置设置断点。

例如:“break main”。

4.运行程序:使用“run”命令开始运行程序。

此时,程序会在设置断点的位置暂停。

5.查看变量:使用“print”命令查看变量值。

GDB 命令参考手册

GDB 命令参考手册
报告你进程的一般状态信息。如果进程停止了。这个报告还包括停止的原因和收到的信号
info proc all
显示上面proc命令这些命令返回的所有信息
quit
q
退出调试程式
frame
shell
shell ls
执行shell命令
make
不退出gdb而重新编译生成可执行文件
disassemble
显示反汇编代码
thread
thread thread_no
用来在线程之间的转换
set
set width 70
就是把标准屏幕设为70列
set var=54
设置变量的值。
forward/search
search string
从当前行向后查找匹配某个字符串的程式行
reverse-search
forward/search相反,向前查找字符串。使用格式同上
up/down
上移/下移栈帧,使另一函数成为当前函数
暂停,步进时自动显示表达式的值
finish
执行直到函数返回 执行直到当前stack返回数返回
where
命令用来查看执行的代码在什么地方中止
backtrace
bt
显示函数调用得所有栈框架(stack frames)的 踪迹和当前函数的参数的值。
watch
w
w exp
监视表达式的值
kill
k
k
结束当前调试的程式
print
p
p exp
打印表达式的值
p/fmt exp
fmt为以下值

gdb使用手册

gdb使用手册

gdb使用手册摘要:一、GDB 简介1.GDB 的定义2.GDB 的作用二、GDB 的安装与配置1.安装GDB2.配置GDB三、GDB 的基本使用1.启动GDB2.调试程序3.控制程序执行4.查看程序状态四、GDB 的高级功能1.断点调试2.单步执行3.查看变量值4.修改变量值5.控制台输出6.退出GDB正文:GDB(GNU Debugger)是一个用于调试程序的强大工具。

它支持C、C++等语言,可以通过命令行或图形界面进行操作。

GDB 可以帮助程序员找到程序中的错误,并能够对程序进行调试、测试和优化。

一、GDB 简介GDB 是一个功能强大的调试器,主要用于调试C、C++等语言编写的程序。

它可以让程序员在程序运行过程中观察程序的内部状态,设置断点,单步执行代码等,以便找到程序中的错误。

二、GDB 的安装与配置1.安装GDB:GDB 通常与编译器一起安装,例如,使用GCC 编译器时,可以通过以下命令安装GDB:`sudo apt-get install gdb`。

2.配置GDB:在使用GDB 之前,可能需要对GDB 进行一些配置,例如设置编译器的路径、添加新的调试符号等。

可以使用`gdb-config`命令进行配置。

三、GDB 的基本使用1.启动GDB:使用`gdb`命令启动GDB,并指定要调试的程序。

例如:`gdb my_program`。

2.调试程序:在GDB 中,可以使用`run`命令开始运行程序。

程序将暂停在第一个断点处,此时可以查看程序的状态,例如变量值、内存地址等。

3.控制程序执行:在GDB 中,可以使用`next`、`step`、`continue`等命令控制程序的执行。

`next`命令会执行当前行的下一行代码,`step`命令会执行当前行的所有代码,`continue`命令会继续执行程序,直到遇到断点或程序结束。

4.查看程序状态:在GDB 中,可以使用`print`、`display`、`backtrace`等命令查看程序的状态。

GDB使用手册(中文版)

GDB使用手册(中文版)

GDB 4.16, Copyright 1995 Free Software Foundation, Inc... (gdb) (gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是 q/Q) 为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。
首先我们可以设置 gdb 的屏幕大小。键入: (gdb)set width 70
* 数据:
检查数据
* 语言:
用不同的语言来使用 GDB
* 符号:
检查符号表
* 更改:
更改执行
* GDB 的文件
文件
* 对象 * 控制 GDB * 执行序列: * Emacs: * GDB 的 bug: * 命令行编辑: * 使用历史记录交互: * 格式化文档: * 安装 GDB :
指定调试对象 控制
执行一序列命令 使 GDB 和 Emacs 一起工作
行编辑
如何格式化和打印 GDB 文档
* 索引:
GDB 简介: **************
调试器(比如象 GDB)能让你观察另一个程序在执行时的内部活动,或程序出错时 发生了什么。
GDB 主要能为你做四件事(包括为了完成这些事而附加的功能),帮助你找出程序 中的错误。
Richard Stallman 是 GDB 的始作俑者,另外还有许多别的 GNU 的成员。许多人
为此作出了贡献。(都是老外不提也罢,但愿他们不要来找我麻烦:-))
这里是 GDB 的一个例子: 原文中是使用一个叫 m4 的程序。但很遗憾我找不到这个程序的原代码,
所以没有办法来按照原文来说明。不过反正是个例子,我就拿一个操作系统的 进程调度原码来说明把,原代码我会附在后面。
Fundamentally, the General Public License is a license which says that you have these freedoms and that you cannot take these freedoms away from anyone else. GDB 的作者:

gdb使用手册

gdb使用手册

gdb使用手册(原创版)目录1.GDB 简介2.GDB 基本功能3.GDB 使用流程4.GDB 常见命令5.GDB 高级特性6.GDB 未来发展正文1.GDB 简介GDB(GNU Debugger)是一款功能强大的调试工具,主要用于 C/C++程序的调试。

GDB 提供了丰富的调试功能,可以帮助程序员定位问题、分析程序运行状态,从而有效地提高软件质量和开发效率。

2.GDB 基本功能GDB 的基本功能包括:设置断点、单步执行、步进执行、查看变量值、运行时查看内存信息、调试线程等。

通过这些功能,程序员可以深入了解程序运行过程中的各种信息,找出潜在的问题。

3.GDB 使用流程GDB 的使用流程主要包括以下几个步骤:(1)启动 GDB:使用“gdb”命令启动 GDB,然后载入需要调试的程序。

(2)设置断点:在需要设置断点的代码位置使用“break”命令。

(3)运行程序:使用“run”命令开始运行程序。

(4)调试过程:根据需要使用 GDB 提供的命令,如“next”、“step”、“continue”等,控制程序的执行流程。

(5)退出 GDB:调试完成后,使用“quit”命令退出 GDB。

4.GDB 常见命令GDB 提供了众多命令以满足不同调试需求,以下是一些常见的 GDB命令:(1)设置断点:break、break-set-file、break-set-function。

(2)控制程序执行:run、continue、step、next、step-over、step-into、step-out。

(3)查看程序状态:print、display、list、backtrace。

(4)操作内存:malloc、free、print-memory-usage。

(5)调试线程:thread-create、thread-join、thread-switch。

5.GDB 高级特性GDB 还提供了一些高级特性,如:(1)远程调试:通过远程调试,程序员可以在一台机器上调试另一台机器上的程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GDB用户手册目录目录 (1)摘要 (2)自由软件 (2)自由软件急需自由文档 (2)GDB的贡献者们 (4)1.一个简单的GDB会话 (8)2.征服GDB的进与出 (13)2.1调用GDB (13)2.1.1 选择文件 (14)2.1.2 选择模式 (16)2.1.3 启动期间,GDB做了什么 (19)2.2 退出GDB (20)2.3 Shell命令 (21)2.4 Loging输出 (21)3.GDB命令 (22)3.1命令语法 (22)3.2命令完成 (23)3.3获得帮助 (25)4.在GDB下运行程序 (29)4.1 适合调试的编译 (29)4.2 启动程序 (30)4.3 程序的参数 (32)4.4 程序的环境 (32)4.5 程序的工作目录 (34)4.6 程序的输入输出 (35)4.7 调试某个已运行的进程 (36)4.8 杀掉子进程 (37)4.9 多线程程序的调试 (37)4.10 多进程程序的调试 (40)5.0停止与继续 (42)摘要象GDB这样的调试程序,目的就是让你可以查看其它程序的内部运行过程,或者是在它崩溃的那一时刻它在做什么。

GDB能做4件事(这些还需附加其他的一些事),帮助你捕获在场的错误:·启动程序,设定任何可以影响它行为的东西。

·在特定的条件下使程序停止。

·当程序停止时,分析发生了什么。

·改变程序里的一些东西,进行一个由于bug所导致的结果的矫正性试验,同时继续了解另外一个bug。

可以使用GDB调试用C和C++编写的程序,更多信息参见支持的语言,及C与C++。

部分支持Modula-2,Modula-2的更多信息参见Modula-2。

在调试使用sets、subranges、file variables或嵌套函数的Pascal程序时,目前不能工作。

GDB不支持entering expressions、printing values或者类似特性的Pascal语法。

GDB可以调试Fortran写的程序,尽管那必然会涉及到带有下划线后缀的一些变量。

GDB可以调试Objective-C写的程序,既可以使用Apple/NeXT运行时库,也可以使用GNU Objective-C运行时库。

自由软件GDB是自由软件,受GNU公共许可证(GPL)保护。

GPL给予了你自由复制或改编程序的许可——就是说获得拷贝的人也就获得了自由修改它的权利(这意味着他们必须有权访问源代码),而且可以自由的发布更多的拷贝。

大部分软件公司所使用的版权限制了你的自由。

自由软件基金会利用GLP保护了这些自由。

基本上来说,公共许可证是一个说明你拥有这些自由的许可证,而且你不能把这些自由从任何人那里占为己有。

自由软件急需自由文档当今的自由软件社区所存在的最大缺憾不在于软件——而在于没有我们可以随同自由软件包含在一起的好文档。

好多我们十分重要的程序没有一同提供自由的参考指南和介绍性文本。

对任何一个软件包来说,文档是最基本的部分。

当一个重要的自由软件包没有与一个自由手册或指南一同提供时,那就是一个极大的缺憾。

如今,我们拥有太多这样的缺憾了!拿Perl来说,人们日常所使用的指导手册就不是免费的。

为什么会这样呢?因为这些手册的作者们在发表它们的时候伴有很多限制项目——不能复制、不能修改、不能得到源文件——把它们从自由软件世界中驱逐出去了。

这类的事情已经不只发生过一次了,而且今后还会陆续发生。

我们经常听到某位热心的GNU用户说他正在编写的一个手册,他打算把它捐献给社区,可没想到他签署了出版合同而使这个手册不自由了,所有的期望全都破灭。

自由文档,就像自由软件一样,是自由的,不需要付费的东西。

非自由手册的问题不在于发行商为印刷拷贝所要承担的费用——只要它本身很好就行(自由软件基金会也出售印刷拷贝),而在于这个问题会约束手册的利用。

自由手册可以以源代码的方式获得,允许复制与修改。

非自由手册是不允许这么做的。

自由文档自由度的标准,一般来说与自由软件差不多。

再发布(包括很多常规的商业再发布)必须被允许,不管是以在线形式还以书面形式,以便手册可以伴随着程序的每一份拷贝。

允许有关技术性方面的内容的更正也是至关重要的。

当人们更改软件,添加或改变其某些特性时,如果他们负责任的话,也将会修改相应的手册——因而,他们能够为修改过的程序提供准确而清晰的文档。

某个手册的页数你是无法决定的,但是为某个程序的变更版本写一份全新的手册,对于我们的社区来说,那真是没有必要。

在改进过程中所运用的某些限制是合理的。

例如,要求保持原作者的版权通告、发布条款、以及作者名单,是没有问题的。

在修正版本中包含是他们更正的通告也是没有问题的。

只要论述的是非技术性的话题(就像这一章),可以接受连续完整的章节不可删除或被更改。

能够接受这些限制,是因为它们不会妨碍社区对手册的正常使用。

无论如何,必须允许对手册中所有关技术性方面的内容进行修改,然后通过所有正常的通道,利用所有常规的媒质,发布这个结果。

否则,这些限制就妨碍了对手册的使用,那么它就是非自由的了,我们就得需要一个新的手册来代替它了。

请散布有关这一论点的言辞。

我们的社区仍然在遗失好多手册,这些手册都在成为私有出版物。

如果我们趁早散布自由软件急需自由参考手册和指南这样的言辞的话,也许下一个投稿人就会意识到,只有少数的手册投稿给了自由软件社区。

如果你正在撰写文档,请坚持在GNU的自由文档许可证或其他的自由许可证下出版它。

别忘了,这个决策是需要争得你的赞同的——你不用理会出版社的决策。

只要你坚持,某些出版社会使用自由许可证的,但是他们不能奢求有买卖的特权;那需要由你自己来发行,并且坚定地说:这就是你想要的。

如果这个出版社拒绝了你的生意,那就再换一家。

如果你不能确定某个被提议的许可证是自由的,就写信给licensing@。

你可以使用购买的方式来鼓励商业出版社出售更多的免费的,非赢利版权的手册与指南,尤其是购买那些来自于出版社的拷贝,付给他们撰写或作重大改进的费用。

同时,尽量完全避免购买非自由的文档。

在购买之前,先查看一下发布条款,不管谁要做你的生意都必须尊重你的自由。

查看书的历史,设法奖励支付了作者们工资的那些出版社。

自由软件基金会在/doc/other-free-books.html维护了一个已经由其他一些出版社出版了的文档的列表。

GDB的贡献者们Richard Stallman是GDB的原作者,也是其他好多GNU程序的原作者。

好多人已经对它的开发作了贡献。

谨以此节来表彰那些主要的贡献者们。

自由软件的一个优点就是每个人都无偿的为它作贡献。

遗憾的是,我们无法逐一向他们表示感谢。

在GDB的发布中,有一个“ChangeLog”文件,做了极为详尽的说明。

2.0版本以前的大量变化已湮灭在时间的迷雾中。

恳请:极力欢迎对本节的补充。

如果您或您的朋友(或者是敌人,为了公平),不公平地在这个列表中被遗漏了,我们愿意加入您的名字。

为了使那些可能被遗忘的人们的工作不至于徒劳无功,在此特别感谢那些带领GDB走过各个重要发布版的那些人:Andrew Cagney(发布了6.1, 6.0, 5.3, 5.2, 5.1 和5.0版);Jim Blandy(发布了4.18版);Jason Molenda(发布了4.17版);Stan Shebs(发布了4.14版);Fred Fish (发布了4.16,4.15,4.13,4.12,4.11,4.10和4.9);Stu Grossman 和John Gilmore (发布了4.8,4.7,4.6,4.5和4.4版);John Gilmore(发布了4.3,4.2,4.1,4.0和3.9版);Jim Kingdon(发布了3.5,3.4和3.3版);以及Randy Smith(发布了3.2,3.1和3.0)。

Richard Stallman,在Peter TerMaat、Chris Hanson、和Richard Mlynarik的多次协助下,完成到了2.8版的发布。

Michael Tiemann是GDB中大部分GNU C++支持的作者,得益于来自Per Bothner 和Daniel Berlin的其他的一些重要贡献。

James Clark编写了GNU C++反签名编码器(demangler)。

早期在C++方面的工作是由Peter TerMaat做的(他也做了大量的到3.0发布版的常规更新工作)。

GDB是使用BFD子程序库来分析多种目标文件格式的,BFD是David V. Henkel-Wallace、Rich Pixley、Steve Chamberlain和John Gilmore的一个合作项目。

David Johnson编写了最初的COFF支持。

Pace Willison做了最初的压缩的COFF支持。

哈里斯计算机系统(Harris Computer Systems)的Brent Benson贡献了DW ARF 2的支持。

Adam de Boor 和Bradley Davis贡献了ISI Optimum V的支持。

Per Bothner、Noboyuki Hikichi和Alessandro Forin 贡献了MIPS的支持。

Jean-Daniel Fekete贡献了Sun 386i的支持。

Chris Hanson改良了HP9000的支持。

Noboyuki Hikichi和Tomoyuki Hasei贡献了Sony/News OS 3的支持。

David Johnson贡献了Encore Umax的支持。

Jyrki Kuoppala贡献了Altos 3068的支持。

Jeff Law贡献了HP PA和SOM的支持。

Keith Packard贡献了NS32k的支持。

Doug Rabson贡献了Acorn Risc Machine的支持。

Bob Rusk贡献了Harris Nighthawk CX-UX的支持。

Chris Smith贡献了Convex的支持(还有Fortran的调试)。

Jonathan Stone贡献了Pyramid 的支持。

Michael Tiemann贡献了SPARC的支持。

Tim Tucker贡献了对Gould NP1和Gould Powernode的支持。

Pace Willison贡献了Intel 386的支持。

Jay Vosburgh贡献了Symmetry的支持。

Marko Mlinar贡献了OpenRISC 1000的支持。

Andreas Schwab贡献了M68k GNU/Linux的支持。

Rich Schaefer 和Peter Schauer为支持SunOS的共享库提供了帮助。

相关文档
最新文档