第6章 GDB调试器及调试方法
GDB调试简易教程

设置断点(break point)
`break ... if COND` 条件断点,当表达式COND非零时程序在断 点停止 例如`break 253 if i=10` `tbreak …` 设置一个只会停止一次的断点
设置观察点(watch point)
`watch EXPR` 为EXPR设置一个观察点,一旦EXPR被写入并发生变化,程 序停止 `rwatch EXPR` EXPR被读取时,程序停止 `awatch EXPR` EXPR被读取或者被写入时,程序停止 当程序运行到EXPR作用域以外的地方时,GDB将会自动删 除此观察点,如果想继续观察,必须重新设置观察点。
启动:
最通常的命令就是使用一个参数: $(m68k-linux-)gdb <可执行文档名> 你还可以同时为你的执行文件指定一个core文件: $gdb <可执行文件名> core 你也可以为你要执行的文件指定一个进程号:
$gdb <可执行文件名> <进程号>
常用启动参数:
-symbols <文件名>(-s <文件名>) 从<文件名>中读去符号 -x <文件名> 执行gdb命令,在<文件名>指定的文件中存放着一序列的gdb 命令,就象一个批处理 -directory(-d) <路径> 指定路径。把<路径>加入到搜索源文件的路径中
程序的恢复与单步调试
finish 运行程序,直到当前函数完成并返回,打印函数返回时的堆 栈地址和返回值及参数值等信息 until [location] 简写为u,继续运行程序直至跳出当前正在单步调试的循环体; 加参数表示继续运行到代码的location处或者当前stack frame返回
GDB之调试Python代码

GDB之调试Python代码GDB(GNU调试器)是一种强大的调试工具,它可以帮助开发人员识别和修复代码中的错误。
本文将介绍如何使用GDB调试Python代码。
1.安装GDB和Python调试器GDB是Linux中最广泛使用的调试器之一。
要启用GDB调试器,您需要首先安装它。
sudo apt-get install gdb在安装GDB之后,您还需要安装Python调试器。
Python调试器可以与GDB结合使用,使您能够在Python代码中进行调试。
sudo apt-get install python2.7-dev2.启用GDB调试要在GDB中调试Python代码,请从命令行输入以下命令:$ gdb python接下来,您需要使用一些特殊的GDB命令来启动Python解释器并打开代码。
3.设置断点设置断点是在GDB中调试代码的一个重要步骤。
要设置断点,请在您想要停止执行代码的行上运行断点命令。
例如,如果您想在print语句行上停止代码执行,可以使用以下命令:(gdb) b file.py:5在这个例子中,文件名为file.py,行数为5。
4.开始GDB调试要启动GDB调试,请输入以下命令:(gdb) run这将启动Python解释器,并立即停止在您之前设置的断点上。
此时,您可以使用GDB的命令来查看代码,并将其分步执行。
5.分步执行代码使用分步命令,您可以一步一步地执行代码,并检查变量、函数和其他重要信息。
以下是常用的分步命令:n:执行下一行代码。
s:进入子函数或方法调用之内。
c:继续执行代码,直到下一个断点或程序终止。
p:打印变量或表达式的值。
bt:查看调用堆栈。
6.查看变量和值在GDB中调试Python代码时,您可以使用print或p命令来查看变量或表达式的值。
以下是一个示例:(gdb) p x$1 = 5在这个例子中,变量x的值为5。
7.查看调用堆栈使用bt命令可以查看当前调用堆栈,以便您更好地了解代码的执行路径。
gdb调试命令的使用及总结

gdb调试命令的使用及总结
gdb是一个功能强大的调试器,用于调试C、C++等编程语言的程序。
它提供了许多命令和功能,可以帮助开发人员诊断和修复程序中的错误。
下面我将从使用和总结两个方面来回答你的问题。
首先是gdb的使用。
要使用gdb调试程序,首先需要在编译时包含调试信息。
这意味着在使用gcc或g++编译程序时,需要添加`-g`选项。
例如:
gcc -g -o program program.c.
然后可以使用以下命令启动gdb并加载程序:
gdb program.
一旦进入gdb,可以使用一系列命令来控制程序的执行和检查程序状态。
例如,可以使用`run`命令来运行程序,`break`命令来设置断点,`step`和`next`命令来逐行执行程序等等。
此外,还可以使用`print`命令来打印变量的值,`backtrace`命令来查看函数调用栈等等。
现在来总结一下gdb的使用。
gdb是一个非常强大的调试工具,它可以帮助开发人员快速定位和修复程序中的错误。
通过设置断点、逐行执行程序、查看变量的值等操作,开发人员可以深入了解程序
的执行过程,找出其中的问题。
此外,gdb还提供了丰富的文档和
在线帮助,可以帮助开发人员更好地利用它的功能。
总的来说,gdb是一个非常有用的调试工具,它可以帮助开发
人员提高程序调试的效率和准确性。
通过学习和熟练掌握gdb的使用,开发人员可以更快地修复程序中的错误,提高自己的编程水平。
希望这个回答能够帮助你更好地了解gdb的使用和功能。
gdb调试命令的使用及总结

gdb调试命令的使⽤及总结gdb调试命令的使⽤及总结gdb是⼀个在UNIX环境下的命令⾏调试⼯具。
如果需要使⽤gdb调试程序,请在gcc时加上-g选项。
下⾯的命令部分是简化版,⽐如使⽤l代替list等等。
1.基本命令命令描述backtrace(或bt)查看各级函数调⽤及参数finish连续运⾏到当前函数返回为⽌,然后停下来等待命令frame(或f)帧编号选择栈帧info(或i) locals查看当前栈帧局部变量的值list(或l)列出源代码,接着上次的位置往下列,每次列10⾏list ⾏号列出从第⼏⾏开始的源代码list 函数名列出某个函数的源代码next(或n)执⾏下⼀⾏语句print(或p)打印表达式的值,通过表达式可以修改变量的值或者调⽤函数quit(或q)退出gdb调试环境set var修改变量的值start开始执⾏程序,停在main函数第⼀⾏语句前⾯等待命令step(或s)执⾏下⼀⾏语句,如果有函数调⽤则进⼊到函数中1)进⼊GDB #gdb test test是要调试的程序,由gcc test.c -g -o test⽣成。
进⼊后提⽰符变为(gdb) 。
2)查看源码 (gdb) l 源码会进⾏⾏号提⽰。
如果需要查看在其他⽂件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。
或者:使⽤断点或单步运⾏,到某个函数处使⽤s进⼊这个函数。
3)设置断点 (gdb) b 6 这样会在运⾏到源码第6⾏时停⽌,可以查看变量的值、堆栈情况等;这个⾏号是gdb的⾏号。
4)查看断点处情况 (gdb) info b 可以键⼊"info b"来查看断点处情况,可以设置多个断点;5)运⾏代码 (gdb) r6)显⽰变量值 (gdb) p n 在程序暂停时,键⼊"p 变量名"(print)即可; GDB在显⽰变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引⽤标记,以后若想再次引⽤此变量,就可以直接写作"$N",⽽⽆需写冗长的变量名;7)观察变量 (gdb) watch n在某⼀循环处,往往希望能够观察⼀个变量的变化情况,这时就可以键⼊命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运⾏ (gdb) n9)程序继续运⾏ (gdb) c 使程序继续往下运⾏,直到再次遇到断点或程序结束;10)退出GDB (gdb) q2.断点调试命令格式 例⼦ 作⽤break + 设置断点的⾏号 break n 在n⾏处设置断点tbreak + ⾏号或函数名 tbreak n/func 设置临时断点,到达后被⾃动删除break + filename + ⾏号 break main.c:10 ⽤于在指定⽂件对应⾏设置断点break + <0x...> break 0x3400a ⽤于在内存某⼀位置处暂停break + ⾏号 + if + 条件 break 10 if i==3 ⽤于设置条件断点,在循环中使⽤⾮常⽅便info breakpoints/watchpoints [n] info break n表⽰断点号,查看断点/观察点的情况clear + 要清除的断点⾏号 clear 10 ⽤于清除对应⾏的断点,要给出断点的⾏号,清除时GDB会给出提⽰delete + 要清除的断点编号 delete 3 ⽤于清除断点和⾃动显⽰的表达式的命令,要给出断点的编号,清除时GDB不会给出任何提⽰disable/enable + 断点编号 disable 3 让所设断点暂时失效/使能,如果要让多个编号处的断点失效/使能,可将编号之间⽤空格隔开awatch/watch + 变量 awatch/watch i 设置⼀个观察点,当变量被读出或写⼊时程序被暂停rwatch + 变量 rwatch i 设置⼀个观察点,当变量被读出时,程序被暂停catch 设置捕捉点来补捉程序运⾏时的⼀些事件。
gdb基本用法

gdb基本用法GNU调试器(GNU Debugger,简称GDB)是一个强大的、功能丰富的调试工具,它可以帮助我们找出程序中的错误。
在程序出错时,GDB 可以帮助我们找出出错的原因,以及出错时程序的状态。
本文将介绍GDB的基本用法。
一、GDB概述GDB是一个基于命令行的调试器,它允许开发者在程序出错时,通过一系列的命令来查看、改变程序的状态,从而找出出错的原因。
GDB支持多种编程语言,包括C、C++、Fortran等。
1. 启动GDB要启动GDB,需要先打开一个终端窗口,然后在该窗口中输入`gdb`命令,后面跟上需要调试的程序。
例如,如果要调试一个名为`myprogram`的可执行文件,可以输入`gdb myprogram`。
2. 设置断点在程序中设置断点,可以让GDB在程序执行到该位置时暂停,从而方便我们查看此时程序的状态。
可以通过`break`命令来设置断点,例如`break function_name`会在函数`function_name`处设置断点。
当程序执行到该处时,GDB会暂停程序的执行。
3. 运行程序在GDB中,可以使用`run`命令来运行程序。
默认情况下,`run`命令会从上次停止的地方继续执行程序。
如果需要在其他位置开始执行程序,可以使用`continue`命令。
4. 查看程序状态在程序暂停时,可以通过GDB的命令来查看当前程序的状态。
例如,可以使用`print`命令来查看变量的值,使用`info`命令来查看变量的类型、值等详细信息。
还可以使用`backtrace`命令来查看当前函数的调用栈。
5. 改变程序状态除了查看程序状态外,GDB还提供了许多命令来改变程序的状态。
例如,可以使用`step`命令来逐行执行代码,使用`continue`命令来继续执行程序直到下一个断点或程序结束,使用`kill`命令来停止程序的执行。
还可以使用一些命令来修改变量的值,例如使用`set variable = new_value`来改变变量的值。
gdb使用教程

gdb使用教程GDB是GNU调试器的缩写,是一个功能强大的命令行调试工具,用于帮助开发人员在调试过程中定位和修复程序中的错误。
以下是GDB的使用教程:1. 编译程序时添加调试信息:在使用GDB进行调试之前,需要确保程序在编译时包含了调试信息。
可以通过在编译命令中添加`-g`选项来实现。
例如:`gcc -g main.c -o main`。
2. 启动GDB:在命令行中输入`gdb`命令,然后输入可执行文件的路径作为参数。
例如:`gdb ./main`。
3. 设置断点:断点是在程序执行到指定位置时停下来的标记。
可以使用`break`命令来设置断点。
例如:`break main`可以在`main`函数的开头设置一个断点。
4. 开始执行程序:使用`run`命令来运行程序。
例如:`run`。
5. 执行程序并停在断点处:当程序开始运行后,会在达到断点处停下来等待输入。
此时可以使用一些GDB命令来检查程序的状态,如查看变量的值、栈帧等。
6. 单步执行:使用`next`命令来逐行执行程序。
例如:`next`。
7. 跳出函数:使用`finish`命令可以跳出当前正在执行的函数,并停在调用该函数的上一个函数中。
8. 继续执行:使用`continue`命令可以接着执行程序直到下一个断点或程序结束。
9. 查看变量的值:使用`print`或简写的`p`命令可以查看变量的值。
例如:`print i`可以查看变量`i`的值。
10. 修改变量的值:使用`set`命令可以修改变量的值。
例如:`set i = 10`可以将变量`i`的值修改为10。
11. 查看函数调用栈:使用`backtrace`或简写的`bt`命令可以查看函数调用栈。
12. 退出GDB:使用`quit`命令可以退出GDB。
以上是一些常用的GDB命令,使用GDB进行调试时还有很多其他的功能和命令可以使用,可以通过阅读GDB的文档来更详细地了解。
gdb调试命令的使用及总结

gdb调试命令的使用及总结GDB是GNU调试器的简称,是一个非常强大的调试工具,可用于调试C、C++等编程语言的程序。
通过GDB,开发人员可以在程序运行过程中查看变量的值、跟踪函数的执行、定位错误的原因等。
下面将介绍一些常用的GDB调试命令及其使用方法。
1. 启动GDB调试器:在命令行中输入"gdb"命令即可启动GDB调试器。
然后使用"gdb <可执行文件名>"命令加载要调试的可执行文件。
2. 设置断点:使用"break <行号>"命令在指定行号上设置断点。
可以使用"break <函数名>"命令在指定函数的入口处设置断点。
使用"info breakpoints"命令可以查看当前设置的断点。
3. 运行程序:使用"run"命令运行程序。
如果程序需要输入参数,则可以使用"run <参数1> <参数2> ..."的形式运行。
4. 单步执行:在断点处停下来后,可以使用"next"命令执行下一行代码。
使用"step"命令进入函数内部执行。
使用"finish"命令执行完当前函数并返回上一层调用。
5. 查看变量值:使用"print <变量名>"命令可以查看指定变量的值。
使用"display <变量名>"命令可以设置自动显示变量值。
6. 查看堆栈信息:使用"backtrace"命令可以查看函数调用的堆栈信息。
使用"frame <帧号>"命令可以切换到指定的堆栈帧。
7. 修改变量值:使用"set <变量名>=<新值>"命令可以修改指定变量的值。
gdb 使用方法

gdb 使用方法一、基本用法1. 启动gdb可以通过在命令行中输入"gdb"命令来启动gdb,并指定要调试的可执行文件作为参数。
例如,要调试名为"program"的可执行文件,可以输入以下命令:```gdb program```2. 设置断点断点是一个程序中的特定位置,当程序执行到该位置时,会暂停执行,从而可以检查程序的状态。
可以使用"gdb"命令设置断点。
例如,要在程序的第10行设置一个断点,可以输入以下命令:```break 10```可以使用"break"命令指定函数名或文件名和行号来设置断点。
3. 运行程序在gdb中运行程序时,可以使用"run"命令。
如果程序需要命令行参数,可以在"run"命令后面添加这些参数。
例如,要运行程序并传递参数"arg1"和"arg2",可以输入以下命令:```run arg1 arg2```4. 执行程序在gdb中执行程序时,可以使用"continue"命令。
该命令会让程序继续执行,直到遇到下一个断点或程序结束。
5. 单步执行在gdb中,可以使用"next"命令逐行执行程序。
该命令会执行当前行,并将程序指针移到下一行。
如果当前行是函数调用,"next"命令会将程序指针移到函数的第一行。
6. 查看变量的值在gdb中,可以使用"print"命令查看变量的值。
例如,要查看变量"var"的值,可以输入以下命令:```print var```7. 修改变量的值在gdb中,可以使用"set"命令修改变量的值。
例如,要将变量"var"的值设置为10,可以输入以下命令:```set var = 10```8. 退出gdb在gdb中退出调试会话时,可以使用"quit"命令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 Sept. 2008 Confidential
6.1 gdb介绍
调试器使用:
• •
监视程序中变量的值 设置断点以使程序在指定的代码行上停止执行
•
单步执行代码
3 Sept. 2008 Confidential
6.2 gdb的使用
•
为使程序能被调试,需要gcc编译时用 -g 选项为程序编译时添加 调试信息。 例如:gcc –g –o helloworld helloworld.c
3 Sept. 2008 Confidential
6.3 gdb命令
[break命令的使用] 1. 根据行号设置断点: (gdb) break linenum 2. 根据函数名设置断点: (gdb) break funcname 3. 执行非当前源文件的某行或某函数时停止执行: (gdb) break filename:linenum (gdb) break filename:funcname 4. 根据条件停止程序执行: (gdb) break linenum if expr (gdb) break funcname if expr
显示变量或函数类型。 在代码里设断点,这将使程序执行到这里时被挂起。 显示当前断点清单,包括到达断点处的次数等。 显示被调试文件的详细信息。 显示所有的函数名称。 显示当函数中的局部变量信息。 显示被调试程序的执行状态。 删除第n个断点。 关闭第n个断点。 开启第n个断点。 显示结构定义。 设置变量的值。 调用并执行名为name,参数为args的函数。 终止当前函数并输出返回值。 停止当前函数并返回value给调用者。
3 Sept. 2008 Confidential
6.7 嵌入式gdb简介
•
调试方法 主机IP:192.168.0.33,目标板IP:192.168.0.34 1.用交叉编译器编译程序hello,并拷贝至目标板。 2.运行目标板上的gdbserver。 例:./gdbserver 192.168.0.33:6666 hello 3.运行主机上的linux-gdb,并连接目标板。 例:linux-gdb hello (gdb)target remote 192.168.0.34:6666 4.调试程序。 连接后调试方法与本地gdb调试方法相同。
3 Sept. 2008 Confidential
6.3 gdb命令
• • • • • • • • • • • • • • •
whatis break info break info files info func info local info prog delete [n] disable[n] enable[n] ptype set variable call name(args) Finish return value
第六章 GDB调试器及调试方法
3 Sept. 2008 Confidential
第六章:GDB调试器及调试方法
目标: 本章使学员熟练掌握linux系统下gdb调 试器的使用,通过本课的学习,学员应该 掌握如下知识: 了解gdb的作用 掌握gdb下程序的调试方法
学时:2 学时
教学ept. 2008 Confidential
6.4 基本的gdb调试
3 Sept. 2008 Confidential
6.4 基本的gdb调试
3 Sept. 2008 Confidential
6.5 内存出错的gdb调试
•
常见的段错误
•
出错程序代码
3 Sept. 2008 Confidential
6.5 内存出错的gdb调试
•
利用core文件直接定位出错代码。
3 Sept. 2008 Confidential
6.5 内存出错的gdb调试
•
练习:利用core文件定位以下出错代码。
3 Sept. 2008 Confidential
6.6 其它调试方法
•
利用#ifdef #endif为程序添加调试信息。
•
linux-gdb
gdbserver
3 Sept. 2008 Confidential
6.7 嵌入式gdb简介
•
安装方法 1.下载gdb源码包,例如gdb-7.4.tar.gz。 2.解压缩源码包。 3.编译主机端调试器linux-gdb,并修改环境变量。 4.编译目标板调试器gdbserver。 5.下载gdbserver至目标板。
3 Sept. 2008 Confidential
6.5 内存出错的gdb调试
3 Sept. 2008 Confidential
6.5 内存出错的gdb调试
•
利用core文件进行出错文件的调试,使用ulimit –c来设定产生core文 件的容量,0为不产生core文件,然后执行通过gdb进行调试。
3 Sept. 2008 Confidential
file kill list next step run c quit watch backtrace print make shell
装入想要调试的可执行文件。 终止正在调试的程序。 列出产生执行文件的源代码的一部分。 执行一行源代码但不进入函数内部。 执行一行源代码而且进入函数内部。 执行当前被调试的程序。 继续运行程序。 终止gdb。 使你能监视一个变量的值而不管它何时被改变。 栈跟踪,查出代码被谁调用。 查看变量的值。 使你能不退出gdb就可以重新产生可执行文件。 使你能不离开gdb就执行UNIX shell命令。
3 Sept. 2008 Confidential
6.2 gdb的使用
•
在命令行上键入 gdb 并按回车键就可以运行 gdb 了, 如果一切正常 的话, gdb 将被启动并且你将在屏幕上看到类似的内容:
3 Sept. 2008 Confidential
6.3 gdb命令
• • • • • • • • • • • • •
3 Sept. 2008 Confidential
6.6 其它调试方法
•
通过gcc的-D参数进行功能的开启,执行后,通过开启调试信息, 并判断出出错函数为aaa。
3 Sept. 2008 Confidential
6.7 嵌入式gdb简介
在嵌入式交叉开发模型中,gdb+gdbserver是调试目标板的常用方 法。 • gdb运行在主机上,而gdbserver运行在目标板上。它们通过网络 连接实现远程调试。