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)远程调试:通过远程调试,程序员可以在一台机器上调试另一台机器上的程序。

GDB不完全手册

GDB不完全手册

GDB不完全手册巫山霏云使用GDB调试程序必须在被调试程序中间加入调试信息,Free Pascal和GCC都是使用的–g 选项,在命令行下使用如下方法:fpc –g temp.pas这样编译出来的程序就带有编译信息咯,可以直接被GDB认出来。

p.s. fpc的编译选项中文解释我已经在DRS,OIBH上面公布了,有兴趣的可以去看看,也可以去我的Website查找。

在FP的IDE中可以在Option菜单下的mode中间选择Debug模式,然后编译程序,即可使编译后的程序带有调试信息。

需要说明的是没人情况下直接按F9编译出来的程序并没有带调试信息,但是当你按F7调试程序时,FP会重新按照编译模式编译一次代码,从而使你可以编译程序。

直接使用GDB有两种形式,一种从IDE里面的DeBug菜单中GDB Window进入GDB界面。

这样可以直接使用GDB,但是仍然不是很稳定。

我不是特别推荐,当然这个也有好处,和IDE 结合比较紧密。

比较好的方法是在命令行下面输入gdb temp.exe直接进入GDB,如下:D:\fpc\bin\win32\fpc.exe –g E:\prodata\program\temp\temp.pasFree Pascal Compiler version 2.0.2 [2005/12/27] for i386Copyright (c) 1993-2005 by Florian KlaempflTarget OS: Win32 for i386Compiling E:\prodata\program\temp\temp.pasLinking E:\prodata\program\temp\temp.exe99 Lines compiled, 0.1 secD:\fpc\bin\win32\gdb.exe E:\prodata\program\temp\temp.exeGNU gdb 6.2.1Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome 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 "i686-pc-cygwin"...(gdb)这样便进入了GDB调试环境。

GDB使用手册

GDB使用手册

五、断点的管理
1.显示当前 gdb 的断点信息: (gdb) info break 他会以如下的形式显示所有的断点信息: Num Type Disp Enb Address What 1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155 2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168 删除指定的某个断点: (gdb) delete breakpoint 1
十一、用 GDB 调试程序
从上面看来, GDB 和一般的调试工具没有什么两样,基本上也是完成这些功能,不过 在细节上,你会发现 GDB 这个调试工具的强大,大家可能比较习惯了图形化的调试工具, 但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。 源程序: tst.c 1 #include 2 3 int func(int n) 4{ 5 int sum=0,i; 6 for(i=0; i 7{ 8 sum+=i; 9} 10 return sum;
GDB 使用手册
(转自 /view/639266.htm)
GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜 欢那种图形界面方式的,像 VC、BCB 等 IDE 的调试,但如果你是 在 UNIX 平台下做软 件,你会发现 GDB 这个调试工具有比 VC、BCB 的图形化调试器更强大的功能。所谓 “寸有 所长,尺有所短 ”就是这个道理。 一般来说,GDB 主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。

GDB使用说明

GDB使用说明

GDB使用说明GDB使用说明1、简介GDB(GNU调试器)是一个功能强大的开源调试工具,用于调试C、C++、Fortran等编程语言的程序。

本文档将提供详细的GDB使用说明,包括安装、启动、基本命令以及高级功能的介绍。

2、安装a) 在Linux上安装GDB:在终端中运行以下命令安装GDB:```sudo apt-get install gdb```b) 在Windows上安装GDB:从GDB官方网站最新的Windows 安装包,并按照安装向导进行安装。

3、启动GDBa) 在Linux上启动GDB:在终端中运行以下命令启动GDB:```gdb [可执行文件名]```b) 在Windows上启动GDB:在命令提示符中切换到GDB的安装目录,然后执行以下命令启动GDB:```gdb:exe [可执行文件名]```4、基本命令a) 运行程序- `run`:开始执行程序。

- `r`:运行程序的简写形式。

b) 设置断点- `break [行号]`:在指定行号设置断点。

- `b [行号]`:设置断点的简写形式。

- `break [函数名]`:在指定函数设置断点。

- `b [函数名]`:设置断点的简写形式。

c) 单步执行- `next`:执行下一行语句。

- `n`:`next`命令的简写形式。

- `step`:进入函数内部执行。

- `s`:`step`命令的简写形式。

d) 打印变量- `print [变量名]`:打印指定变量的值。

- `p [变量名]`:`print`命令的简写形式。

e) 查看栈信息- `bt`:查看完整的栈回溯信息。

- `backtrace`:`bt`命令的完整形式。

f) 调试多线程程序- `info threads`:查看线程信息。

- `thread [线程号]`:切换到指定线程。

5、高级功能a) 控制程序的执行- `continue`:从当前位置继续执行程序。

- `c`:`continue`命令的简写形式。

GDB中文手册

GDB中文手册

使用GDB一般来说GDB主要调试的是C/C++的程序。

要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。

使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。

如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

进入GDB启动GDB的方法有以下几种:1、gdb programprogram也就是你的执行文件,一般在当然目录下。

2、gdb program core用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb pid如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。

gdb会自动attach上去,并调试他。

program应该在PATH环境变量中搜索得到。

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。

我在下面只例举一些比较常用的参数:参数说明-symbols [file](-s)读取文件中的符号表-exec [file] (-e)调试一个可执行文件-se [file]上二者的缩写-core [file](-c)读入一个core dump文件-pid number (-p)启动attach模式,除错一个执行中的行程。

number 是目标行程的pid-directory [directory] (-d)将directory加入原始码的搜寻路行-readnow (-r)一次读取完所有的符号表,这会让启动gdb的时间变长,但在执行往后的除错动作会较快速。

下列还有部分选择性的参数,我列出几个目前用的到的:-quiet -silent -q安静模式,启动时gdb将不会显示版权页。

GDB使用手册

GDB使用手册

GDB使用手册《GDB 使用手册详解》一、引言(一)GDB 的简介(二)GDB 的主要功能(三)使用 GDB 的好处二、安装与配置 GDB (一)GDB 的安装方法(二)配置 GDB 的环境变量(三)启动 GDB三、GDB 的基本命令(一)设置断点(二)查看变量(三)单步调试(四)继续执行(五)查看调用栈(六)修改变量的值四、调试多线程程序(一)查看线程信息(二)切换线程(三)设置线程断点(四)处理线程竞争五、调试内存问题(一)检查内存泄漏(二)查看内存布局(三)分析内存访问错误六、调试核心转储文件(一)生成核心转储文件(二)使用 GDB 分析核心转储文件(三)查找导致崩溃的原因七、GDB 的高级功能(一)条件断点(二)监视点(三)远程调试(四)脚本化调试八、GDB 与其他工具的集成(一)与编译器集成(二)与版本控制系统集成(三)与调试器前端集成九、实际案例分析(一)使用 GDB 调试一个简单的程序(二)调试一个多线程程序(三)调试一个内存泄漏问题(四)调试一个核心转储文件十、GDB 的常见问题与解决方法(一)无法启动 GDB(二)断点不起作用(三)调试信息不完整(四)其他常见问题十一、GDB 的最佳实践(一)合理使用断点(二)注意调试的效率(三)结合其他工具进行调试(四)及时清理调试环境十二、GDB 的未来发展(一)GDB 的发展趋势(二)对开发者的影响十三、附录(一)GDB 的命令参考(二)相关资源链接(三)常见问题解答以上是根据 GDB 使用手册编写的文章大纲,你可以根据实际情况进行具体内容的填充和扩展,确保文章不少于 2500 字。

GDB使用说明

GDB使用说明

GDB使用说明文档一、简介:GDB能让你观察一个程序在执行时的内部活动,或程序出错时发生了什么。

GDB主要能为你做以下四件事,帮助你找出程序中的错误。

1.运行你的程序,设置所有的能影响程序运行的东西。

2.保证你的程序在指定的条件下停止。

3.当你程序停止时,让你检查发生了什么。

4.改变你的程序。

那样你可以试着修正某个bug引起的问题,然后继续查找另一个bug.二、GDB运行方式1.通常的调试可执行程序:gdb <可执行文档名>2.调试执行文件指定一个core文件:gdb <可执行文件名> core3.为执行的文件指定一个进程号:gdb <可执行文件名> <进程号>三、GDB常用命令下面先说明GDB的基本指令:(大部分命令使用时只要输入第一个字母就好了,同时支持TAB的自动补全,与shell相类似)1.help:查看帮助2.file:指定一个可执行文件进行调试,gdb将读取些文件的调试信息3.list:列出程序源文件4.run:装载完要调试的可执行文件后,可以用run命令运行可执行文件5.break:设置断点breakpoint,如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,当程序调用些函数时,则产生中断6.continue:c命令可以使中断的程序继续执行,直到下一个中断点或程序结束7.print:输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值8.next:程序执行到断点时中断执行,可以用n指令进行单步执行9.step:程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish10.attach:命令为attach PROCESS-ID,这个命令把一个已经运行的进程(在gdb外启动)连接入gdb,以便调试。

gdb使用手册

gdb使用手册

gdb使用手册摘要:1.GDB 简介2.GDB 的基本组成3.GDB 的使用方法4.GDB 的高级功能5.总结正文:1.GDB 简介GDB(GNU Debugger)是一款强大的调试工具,主要用于C/C++程序的调试。

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

2.GDB 的基本组成GDB 主要由以下几个部分组成:(1)调试器:GDB 的核心部分,用于控制调试过程。

(2)服务器:负责与被调试程序进行通信,收集运行时的信息。

(3)命令:GDB 提供了丰富的命令,用于控制调试过程,如设置断点、单步执行、查看变量值等。

(4)调试脚本:记录调试过程中的操作,可以自动化执行一系列命令。

3.GDB 的使用方法使用GDB 进行调试的基本步骤如下:(1)启动GDB:在终端中输入“gdb”并回车,进入GDB 界面。

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

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

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

(5)单步执行:使用“next”或“step”命令让程序执行到下一个断点或执行当前行的代码。

(6)查看变量值:使用“print”或“display”命令查看变量值。

(7)退出GDB:使用“quit”命令退出GDB。

4.GDB 的高级功能GDB 还提供了许多高级功能,如:(1)监视变量:使用“watch”命令实时查看变量的变化。

(2)执行子程序:使用“exec”命令执行子程序。

(3)控制程序执行:使用“continue”命令让程序继续执行,直到遇到下一个断点;使用“stop”命令让程序立即停止执行。

(4)设置断点条件:使用“break”命令设置条件断点,如:当某个变量的值发生变化时暂停程序。

(5)查看堆栈信息:使用“backtrace”或“bt”命令查看当前堆栈的调用情况。

5.总结GDB 是一款功能强大的调试工具,可以帮助程序员更加高效地查找和修复程序中的问题。

gdb使用指南

gdb使用指南

1.概论我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统.Gdb可以调试各种程序,包括C、C++、JA V A、PASCAL、FORAN和一些其它的语言。

包括GNU所支持的所有微处理器的汇编语言。

在gdb的所有可圈可点的特性中,有一点值得注意,就是当运行gdb的平台(宿主机)通过串行端口(或网络连接,或是其他别的方式)连接到目标板时(应用程序在板上运行),gdb 可以调试对应用程序进行调试。

这个特性不光在将GNU工具移植到一个新的操作系统或微处理器时侯很有用,对于那些使用GNU已经支持的芯片的嵌入式系统进行开发的设计人员来讲,也是非常有用的。

当gdb被适当的集成到某个嵌入式系统中的时候,它的远程调试功能允许设计人员一步一步的调试程序代码、设置断点、检验内存,并且同目标交换信息。

Gdb同目标板交换信息的能力相当强,胜过绝大多数的商业调试内核,甚至功能相当于某些低端仿真器。

2. Gdb在嵌入式领域的功能实现当调试一个远端目标设备时,gdb依靠了一个调试stub来完成其功能。

调试stub 即是嵌入式系统中一小段代码,它提供了运行gdb的宿主机和所调试的应用程序间的一个媒介。

Gdb和调试stub通过GDB串行协议进行通信。

GDB串行协议是一种基于消息的ASCII码协议,包含了诸如读写内存、查询寄存器、运行程序等命令。

由于绝大多数嵌入式系统设计人员为了最好的利用他们手中特定的硬件的特征,总是自己编写自己的stub。

所以我们有必要清楚的了解一下gdb的串行通信协议。

在后面我们会详细介绍。

为了设置断点,gdb使用内存读写命令,来无损害地将原指令用一个TRAP命令或其它类似的操作码(在此假定,被调试的应用程序是处在RAM中的,当然,如果stub 有足够好的性能,硬件也不错的话,这个条件也不是必须的)代替,使得执行该命令时,可以使得控制权转移到调试stub手中去。

在此时,调试stub的任务就是将当前场景传送给gdb (通过远程串行通信协议),然后从gdb处接收命令,该命令告诉了stub下一步该做什么。

gdb使用手册

gdb使用手册

gdb使用手册【实用版】目录1.GDB 简介2.GDB 的基本组成3.GDB 的使用方法4.GDB 的常用命令5.GDB 的高级功能6.总结正文1.GDB 简介GDB(GNU Debugger)是一款功能强大的调试器,主要用于调试 C/C++程序。

GDB 具有丰富的功能,可以满足各种调试需求。

在开源软件领域,GDB 被广泛应用于程序开发和维护过程中。

2.GDB 的基本组成GDB 主要由以下几个部分组成:(1)调试器核心:提供基本的调试功能,如设置断点、单步执行等。

(2)调试器前端:与用户交互,接收用户输入的调试命令。

(3)调试器后端:与被调试程序交互,传递调试器核心发出的命令,并反馈执行结果。

(4)调试器驱动:负责与具体编程语言和编译器接口,实现对被调试程序的支持。

3.GDB 的使用方法使用 GDB 进行程序调试的基本步骤如下:(1)编写调试脚本:在 GDB 中设置断点、观察变量等,需要使用 GDB 命令编写调试脚本。

(2)编译程序:使用编译器编译待调试程序,同时需要添加适当的调试选项,如-g(GCC)或-O(Oracle C)。

(3)运行 GDB:在命令行中输入“gdb”命令,启动 GDB。

(4)载入程序:在 GDB 中输入载入命令,如“file”,指定待调试程序的路径。

(5)开始调试:使用 GDB 的各种命令,如设置断点、单步执行、观察变量等,对程序进行调试。

4.GDB 的常用命令GDB 提供了丰富的命令来满足调试需求,以下是一些常用的 GDB 命令:(1)run:开始执行程序。

(2)next:执行下一行代码,进入函数内部。

(3)step:执行当前行代码,进入函数内部。

(4)continue:继续执行程序,直到遇到下一个断点或程序结束。

(5)backtrace:查看当前函数调用栈。

(6)print:观察变量值。

(7)break:设置断点。

(8)set:设置调试选项,如设置变量值、修改代码等。

GDB手册中文版

GDB手册中文版

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语法。

  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的共享库提供了帮助。

相关文档
最新文档