Fortran第十四讲-GDB调试
GDB调试简易教程

GDB调试简易教程GDB(GNU调试器)是一个开源的调试工具,它用于调试C、C++和其他编程语言的程序。
它允许程序员在执行过程中观察程序的内部状态,帮助找到程序中的错误并进行修复。
下面是一个简易的GDB调试教程,以帮助你入门并学会使用它。
安装GDB首先,你需要在你的系统上安装GDB。
对于大多数Linux发行版,你可以通过在终端中运行以下命令来安装它:```sudo apt-get install gdb```编译程序在使用GDB之前,你需要编译你的程序,并在编译时使用-g选项,以便生成调试信息。
例如,对于C语言程序,你可以使用以下命令来编译:```gcc -g program.c -o program```这将生成一个可执行文件program,并在目录中生成调试信息。
启动GDB在终端中使用以下命令来启动GDB并调试你的程序:```gdb program```这将启动GDB,并且你将看到GDB的命令提示符。
设置断点断点是你在程序中指定的一个位置,当程序执行到该位置时会暂停。
你可以使用断点来观察程序在这一点的状态。
要设置断点,请在GDB的命令提示符下输入以下命令:```break line_number```line_number是你想要设置断点的源代码行号。
例如,要在程序的第10行设置断点,你可以使用以下命令:```break 10```或者你也可以使用函数名作为参数来设置断点:```break function_name```开始调试一旦设置好断点,你可以开始调试你的程序了。
要开始执行程序,请输入以下命令:```run```程序将开始运行直到第一个断点处。
此时,程序会停下来并且GDB会等待你的进一步命令。
观察变量在程序运行到断点处时,你可以使用以下命令来观察程序内部的变量值:```print variable_name```variable_name是你想要观察的变量的名称。
例如,要查看变量x的值,你可以使用以下命令:```print x```你还可以通过使用其他GDB命令来观察更多的变量信息,例如观察数组、结构体等。
gdb 调试方法

gdb 调试方法
GDB 是一款功能强大的调试工具,它可以用于调试C、C++、Python 等编程语言的代码。
下面是一些常用的 GDB 调试方法:
1. 设置断点:可以使用`break` 命令在代码的某一行设置断点,例如 `break main.c:10` 表示在 main.c 文件的第 10 行设置断点。
2. 运行程序:使用 `run` 命令来运行程序,例如 `run arg1 arg2` 表示运行程序并传入参数 arg1 和 arg2。
3. 单步执行:可以使用 `step` 命令以单步方式执行代码,进入
函数时会逐行执行其中的代码。
4. 查看变量值:使用 `print` 命令可以查看变量的值,例如
`print x` 表示打印变量 x 的值。
5. 修改变量值:使用 `set` 命令可以修改变量的值,例如 `set x = 10` 表示将变量 x 的值设置为 10。
6. 查看函数调用栈:使用 `backtrace` 或 `bt` 命令可以打印函数调用栈。
7. 继续执行:使用 `continue` 命令可以继续执行程序直到下一
个断点或程序结束。
8. 异常处理:可以使用 `catch` 命令来设置异常断点,例如
`catch throw` 表示在抛出异常时停止程序执行。
9. 调试多线程程序:GDB 支持调试多线程程序,可以使用
`thread` 命令来操作线程,例如 `thread 2` 表示切换到线程 2 进行调试。
以上是一些常用的 GDB 调试方法,通过掌握这些方法可以更好地使用 GDB 进行程序的调试。
同时,GDB 还提供了更多强大的调试功能,可以根据具体需求来进一步探索和学习。
gdb调试技巧

gdb调试技巧GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
它是一种强大的命令行调试工具。
一般来说,调试器的功能:能够运行程序,设置所有能影响程序运行的参数;能够让程序在指定条件下停止运行;能够在程序停止时检查所有参数的情况;能够根据指定条件改变程序的运行。
gdb调试源代码流程:1)进入GDB #gdb test只需输入GDB和要调试的可执行文件即可,在GDB的启动画面中指出了GDB的版本号、遵循的许可等信息,接下来就进入了由"(gdb)"开头的命令行界面了;2)查看文件(gdb) l在GDB中键入"l"(list)就可以查看程序的源码了,GDB列出的源代码中明确地给出了对应的行号,方便代码的定位;3)设置断点(gdb) b 6只需在"b"(break)后加入对应的行号即可,在GDB中利用行号设置断点是指代码运行到对应行之前暂停;设置断点可以使程序执行到某个位置时暂停,程序员在该位置处可以方便地查看变量的值、堆栈情况等;一般情况下,源代码中大家行号与用户书写程序的行号是一致的,但有时由于用户的某些编译选项会导致行号不一致的情况,因此,一定要查看在GDB中的行号;4)查看断点处情况(gdb) info b可以键入"info b"来查看断点处情况,可以设置多个断点;5)运行代码(gdb) rGDB默认从首行开始运行代码,键入"r"(run)即可;程序运行到断点处停止。
6)看变量值(gdb) p n在程序暂停之后,程序员可以查看断点处的相关变量值,在GDB 中只需键入"p 变量名"(print)即可;GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;7)观察变量(gdb) watch n在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运行(gdb) n单步运行是指一次只运行一条语句,这样可以方便查看程序运行的结果,在此处只需键入"n"(next)即可;随着程序的单步运行,当变量n的值发生变化时,GDB就会自动显示出n的变化情况。
使用GDB进行程序调试

使用GDB进行程序调试GDB(GNU Debugger)是一个功能强大的调试工具,可以帮助程序员找到和解决程序中的错误。
它支持多种编程语言,包括C,C++,Fortran 等,并且可以在多种操作系统上运行,如Linux,MacOS和Windows。
下面是使用GDB进行程序调试的一般步骤:1. 编译程序时添加调试信息:在使用GDB进行程序调试之前,我们需要在编译程序时添加调试信息。
在GCC编译器中,可以通过使用`-g`选项来实现。
例如,`gcc -g my_program.c -o my_program`。
2. 启动GDB:以调试模式启动GDB,可以通过在终端中输入`gdb`命令来启动GDB。
然后,使用`file`命令加载要调试的可执行文件。
例如,`file my_program`。
3. 设置断点:在代码中设置断点,GDB会在断点处停止执行程序。
可以使用`break`命令来设置断点。
例如,`break main`会在程序开始执行时停止在`main`函数的第一行。
4. 运行程序:使用`run`命令来运行程序。
GDB会启动程序,并在遇到断点时停止。
可以使用`continue`命令继续执行程序。
5. 调试程序:一旦程序停止在断点处,可以使用一些GDB命令来检查变量的值,跟踪程序执行流程等。
例如,使用`print`命令来打印变量的值,使用`step`命令来单步执行程序,使用`next`命令将执行一行代码,而不会深入到函数内部。
6. 回顾栈帧:GDB允许回顾程序调用栈上的栈帧信息。
可以使用`backtrace`命令来打印当前调用栈上所有活动栈帧的信息。
使用`frame`命令可以切换到任一栈帧。
7. 调试崩溃:如果程序崩溃了,GDB将会在崩溃发生时停止程序并提供一些有关崩溃原因的信息。
通过使用`bt`命令可以获得崩溃时的调用栈信息。
8. 再次运行:如果在调试过程中发现问题已经解决,可以使用`kill`命令停止程序的执行,并使用`run`命令重新运行程序。
gdb调试方法

gdb调试方法
GDB是一款功能强大的调试器,可以帮助开发人员快速定位和解决程序中的错误。
以下是GDB调试的一些常用方法:
1. 启动程序:在终端中输入gdb programname,其中programname 是要调试的程序的名称。
2. 设置断点:使用break命令设置断点,例如break functionname,在函数functionname处设置断点。
3. 运行程序:使用run命令运行程序,程序会在设置的断点处停止执行。
4. 单步执行:使用单步命令step或next执行程序,step命令会进入函数内部,next命令则不会。
5. 查看变量值:使用print命令查看变量的值,例如print varname。
6. 修改变量值:使用set命令修改变量的值,例如set varname=newvalue。
7. 查看函数调用栈:使用backtrace命令查看函数调用栈,可以确定程序执行到哪个函数。
8. 调试多线程程序:可以使用thread命令查看和切换线程,使用info threads命令查看线程的状态。
9. 导出调试信息:使用gdb -batch -ex 'info functions' programname > function_list.txt命令将程序的函数列表导出到文件中。
以上是GDB调试的一些常用方法,熟练掌握这些方法可以帮助开发人员快速排除程序中的错误。
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是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调试技巧与实战GDB(GNU调试器)是一种强大的调试工具,广泛用于C/C++程序的调试。
它具有许多有用的功能和命令,可以帮助我们快速定位和解决程序中的bug。
在本文中,我将介绍一些GDB调试技巧和实例,帮助您更好地使用GDB进行调试工作。
1. 启动程序:要使用GDB调试程序,我们需要在启动GDB时将程序作为参数传递给它。
例如,要调试名为myprogram的可执行文件,可以使用以下命令启动GDB:```gdb myprogram```2. 设置断点:当我们想要在特定位置暂停程序执行时,可以在该位置设置断点。
使用GDB的"break"命令可以实现。
例如,要在程序的main 函数处设置断点,可以使用以下命令:```break main```我们还可以使用行号来设置断点,例如:```break file.c:10```3. 运行程序:设置了断点后,我们可以使用GDB的"run"命令来运行程序。
程序会在达到断点时暂停执行。
例如:```run```如果程序需要命令行参数,我们可以在run命令后面添加参数。
例如:```run arg1 arg2```4. 单步调试:一旦程序暂停在断点处,可以使用GDB的"step"命令逐行执行程序。
这对于理解程序的执行流程非常有用。
例如:```step```如果希望在函数内部逐行执行,可以使用"next"命令。
它会跳过函数内部的细节,直接进入下一行。
例如:```next```5. 打印变量:在调试程序时,我们经常需要查看变量的值。
GDB的"print"命令可以用于打印变量的值。
例如,要打印整型变量x的值,可以使用以下命令:```print x```我们还可以使用GDB的表达式语言来计算表达式的值。
例如,要打印变量x和y的和,可以使用以下命令:```print x + y```6. 查看堆栈:GDB可以帮助我们查看程序的堆栈跟踪信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STOP语句 用于终止程序的执行 可以在STOP后面加参数,形式 如下: STOP stop_value 例如: STOP ‘Normal completion’ 当终止时,会显示这个字符串
算术IF语句 GOTO语句 计算GOTO语句 赋值GOTO语句
旧的DO循环与CONTINUE
多文件编译
14.1 迷宫的解法一
14.7 在GDB中运行程序
r run 可以在gdb中运行程序
14.8暂停与恢复程序运行
调试程序中,暂停程序运行是必须的,GDB可以方 便地暂停程序的运行。你可以设置程序的在哪行 停住,在什么条件下停住,在收到什么信号时停 往等等。以便于你查看运行时的变量,以及运行 时的流程。 当进程被gdb停住时,你可以使用info program 来 查看程序的是否在运行,进程号,被暂停的原因。 在gdb中,我们可以有以下几种暂停方式:断点 (BreakPoint)、观察点(WatchPoint)、捕捉 点(CatchPoint)、信号(Signals)、线程停止 (Thread Stops)。如果要恢复程序运行,可以 使用c或是continue命令。
14.11.1 自动显示
你可以设置一些自动显示的变量,当程序停住时, 或是在你单步跟踪时,这些变量会自动显示。相 关的GDB命令是display。 display <expr> display/<fmt> <expr>
expr是一个表达式,fmt表示显示的格式,当你 用display设定好了一个或多个表达式后,只要你 的程序被停下来,GDB会自动显示你所设置的这 些表达式的值。
14.8.4为停止点设定运行命令
使用GDB提供的command命令来设置停止点的运行 命令。 也就是说,当运行的程序在被停止住时,我们可以 让其自动运行一些别的命令。 commands [bnum] ... command-list ... end 为断点号bnum指写一个命令列表。当程序被该断 点停住时,gdb会依次运行命令列表中的命令。 例如: break foo if x>0 commands printf "x is %d/n",x
14.8.1 设置断点
break break <subroutine> break <linenum> break ... if <condition> ...可以是上述的参数,condition表示条件, 在条件成立时停住。比如在循环体中,可以设 置break if i=100,表示eakpoints [n] info break [n]
14.8.2设置观察点
观察点一般来观察某个表达式(变量也是一种表 达式)的值是否有变化了,如果有变化,马上停 住程序。我们有下面的几种方法来设置观察点: watch <expr> 为表达式(变量)expr设置一个观察点。 一量表达式值有变化时,马上停住程序。 rwatch <expr> 当表达式(变量)expr被读时,停住程序。 awatch <expr> 当表达式(变量)的值被读或被写时,停 住程序。 info watchpoints 列出当前所设置了的所有观察点。
如果需要调试程序,编译的时候添加-g选项 gfortran –g example.f90 –o example 生成的example.exe文件就是可执行文件 此时,可以输入 gdb example 进入调试程序
14.6 GDB 使用概述
GDB的命令可以输入help查看 输入命令时,可以不用输入完整的命令,只需要 前面几个字母,当然,这前面几个字母应该唯一 区分了该命令 输入一个或多个字母后,连按两次TAB键,可以 列出所有以该字母打头的命令
14.8.3维护停止点
在GDB中,如果你觉得已定义好的停止点没有用了, 你可以使用delete、clear、disable、enable这几个 命令来进行维护。 clear 清除所有的已定义的停止点。 clear <function> 清除所有设置在函数上的停止点。 clear <linenum> 清除所有设置在指定行上的停止点。 delete [breakpoints] [range...] 删除指定的断点,breakpoints为断点号。如果 不指定断点号,则表示删除所有的断点。range 表 示断点号的范围(如:3-7)。其简写命令为d。
PAUSE语句 用于暂停程序的执行 已经在Fortran95中被删掉
END语句 在Fortran90之前,所有的 程序单元都用END结束 Fortran90以后,标准是用 形如: END PROGRAM END MODULE 之类的语句 当然,也可以单用END 但是,内部过程和模块过 程必须用 END SUBROUTINE和 END FUNCTION
step <count> 单步跟踪,如果有函数调用,他会进入该函 数。进入函数的前提是,此函数被编译有debug信 息。很像VC等工具中的step in。后面可以加count 也可以不加,不加表示一条条地执行,加表示执 行后面的count条指令,然后再停住。
next <count> 同样单步跟踪,如果有函数调用,他不会进 入该函数。很像VC等工具中的step over。后面可 以加count也可以不加,不加表示一条条地执行, 加表示执行后面的count条指令,然后再停住。 until 或 u 当你厌倦了在一个循环体内单步跟踪时,这 个命令可以运行程序直到退出循环体。
14.2 迷宫的解法二
在这个算法中,不设置辅助数组 用自定义的数据结构来保存在每个块上面的步数、 方向等信息 TYPE :: maze_element INTEGER :: road INTEGER :: leave_direction INTEGER :: from_direction INTEGER :: step END TYPE maze_element
下面是一些和display相关的GDB命令: undisplay <dnums...> delete display <dnums...> 删除自动显示,dnums意为所设置好了的自动 显式的编号。如果要同时删除几个,编号可以用 空格分隔,如果要删除一个范围内的编号,可以 用减号表示(如:2-5)
14.9 查看栈信息
查看栈信息 ————— 当程序被停住了,你需要做的第一件事就是查看程 序是在哪里停住的。当你的程序调用了一个函数, 函数的地址,函数参数,函数内的局部变量都会 被压入“栈”(Stack)中。你可以用GDB命令来 查看当前的栈中的信息。 查看函数调用栈信息的GDB命令: backtrace bt
设置辅助数组的解法: 设置三个和maze数组一样结构的数组: Step_maze 用于保存当前块在路径中的步数 Leave_direction 用于保存在路径中离开当前块的方 向,0表示东面,1,2,3分别表示南西北 From_direction 表示从哪个方向到达当前块
过程列表: Createmaze(maze,n) 创建一个随机的二维方阵 maze(n,n),方阵的元素要么是0要么是1,1表示 迷宫的通道,0表示迷宫的墙 Init_random_seed() 初始化随机数种子 Solve(maze,n) 在迷宫maze(n,n)中找到一条从 maze(1,1)到maze(n,n)的路径,如果找不到,输出 提示信息,找到就输出路径步骤 get_new_position(n,i,j,direction) 在数组direction中 取得i,j的方向,并计算这个方向所对应的新的i,j 值 check_direction(maze,n,i,j,direction,step_maze) 检查
一般来说,GDB会根据变量的类型输出变量的值。 但你也可以自定义GDB的输出的格式。例如,你 想输出一个整数的十六进制,或是二进制来查看 这个整型变量的中的位的情况。要做到这样,你 可以使用GDB的数据显示格式:
x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。
注释 有效语句位置 续行
行号
在1-5列
每行程序的最前面
DATA语句的使用 变量初始化: DATA a,b,c /1.0,2*2.0/ 数组初始化: REAL a(2,2) DATA a /1.,2.,3.,4./ !按列优先 旧的PARAMETER 语句: INTEGER SIZE PARAMETER (SIZE=1000)
比删除更好的一种方法是disable停止点,disable了 的停止点,GDB不会删除,当你还需要时, enable即可,就好像回收站一样。 disable [breakpoints] [range...] disable所指定的停止点,breakpoints为停止点 号。如果什么都不指定,表示disable所有的停止 点。简写命令是dis. enable [breakpoints] [range...] enable所指定的停止点,breakpoints为停止点 号。 enable [breakpoints] once range... enable所指定的停止点一次,当程序停止后, 该停止点马上被GDB自动disable。
14.3 迷宫的递归解法
见代码
14.4 Fortran程序的调试
程序的调试 程序没有语法错误,但是运行出错 程序运行结果和预期不符 程序运行结果的精度达不到要求
调试的方法: 在程序中增加调试语句,来输出一些中间结果 用调试软件 图形化的调试软件 命令行的调试软件
14.5 GDB的使用
list <function> 显示函数名为function的函数的源程序。 list