GDB调试工具使用方法

一、GDB调试工具功能

  1. 启动被调试的工具
  2. 使被调试的程序在指定位置停住
  3. 当程序被停住时,可以检查程序此时的状态,如变量的值等

为了使调试器实现上述功能,可以使用下述5条命令进行操作:
(1)启动程序。启动程序时,可以设置程序的运行环境,使程序在GDB调试环境下。
(2)设置断点。在运行程序时,程序会在断点处停住,方便用户查看程序此时运行的情况。
(3)查看信息。可以查看与可执行程序相关的各种信息。
(4)分布运行。可以使代码一句一句地执行,方便及时查看程序的信息。
(5)改变环境。可以在程序运行时改变程序的运行环境和程序变量。

二、调试步骤

  1. 编写C/C++原程序
  2. 使用gcc编译器生成可执行文件,格式:gcc -g -o 可执行文件名 源程序文件名
  3. 运行GDB调试工具,格式一:gdb 可执行文件名,格式二,gdb 回车,file 可执行文件名 回车

三、GDB调试命令

1. 启动GDB调试程序

使用GDB调试程序时,必须要让GDB可以获得程序的信息,因此需要在编译程序时,加入参数-g,编译命令如下:

gcc -g -o 可执行文件名 源程序文件名

生成一个带有调试信息的可执行文件,由此,可以使用如下命令语句加载可执行文件程序,进入到GDB调试工具中:

gdb 可执行文件

进入GDB调试工具的另一种方法是,可以先输入GDB命令(在命令行中输入“gdb ”,回车),然后通过文件命令加载可执行文件,例如:

file  可执行文件名

在这里插入图片描述

2. 设置/删除/断点

设置断点

目的:在该点处中断程序的运行,方便观察程序状态,并且可以单步跟踪后续代码。

方法:

//运行到某行停止
break 行号

//程序进入指定功能函数时停止
break 函数名

//符合if语句条件时,运行到指定位置停止运行
break 行号/函数名称 if条件

删除断点

  1. delete
    格式:delete 断点编号

  2. clear
    格式:clear 断点所在行号
    在这里插入图片描述

查看断点

可使用info breakpoints查看断点信息。

3. 运行程序run

run命令就相当于平时的./程序,例如需要输入./client 10.144.42.88 4321可以启动./client程序,这里就需要输入run 10.144.42.88 4321

当设置完断点以后,运行run,就会将程序运行到断点处。

4. 继续运行程序continue

程序运行到断点处后,希望程序继续往下运行,则需要输入continue命令,如果后面后面没有断点了,则程序会持续运行。

5. 逐条运行step

程序会一步一步运行,可以使用快捷键s,有的Linux系统支持回车键会执行上次输入的命令,也可以按回车。

有时候会出现No such file or directory.这行提示符,则需要输入finish命令,然后再step

6. 单步运行next

next 是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在其他调试器中相当于step-over,作用是在同一个调用栈层中移动到下一个可执行的代码行。调试器不会进入函数体。如果当前行是函数的最后一行,则,next将进入下一个栈层,并在调用函数的下一行停止。

7. finish

finish就是但单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。在其他调试器中相当于step-out,作用是在栈中前进到到下一层,并在调用函数的下一行停止。

8.gdb 中step,next与finish的区别

step 就是单步执行,遇到子函数就进入并且继续单步执行;在其他调试其中相当于step-into命令,作用是移动到下一个可执行的代码行。如果当前行是一个函数调用,则调试器进入函数并停止在函数体的第一行。step可以帮助初步揭开代码位置的谜团,例如:函数调用和函数本身可能在不同的文件中。

next 是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在其他调试器中相当于step-over,作用是在同一个调用栈层中移动到下一个可执行的代码行。调试器不会进入函数体。如果当前行是函数的最后一行,则,next将进入下一个栈层,并在调用函数的下一行停止。

finish就是但单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。在其他调试器中相当于step-out,作用是在栈中前进到到下一层,并在调用函数的下一行停止。

三、检查数据的功能及命令

1.显示变量或者表达式的值

格式:print 变量名/表达式

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
README for GNU development tools This directory contains various GNU compilers, assemblers, linkers, debuggers, etc., plus their support routines, definitions, and documentation. If you are receiving this as part of a GDB release, see the file gdb/README. If with a binutils release, see binutils/README; if with a libg++ release, see libg++/README, etc. That'll give you info about this package -- supported targets, how to use it, how to report bugs, etc. It is now possible to automatically configure and build a variety of tools with one command. To build all of the tools contained herein, run the ``configure'' script here, e.g.: ./configure make To install them (by default in /usr/local/bin, /usr/local/lib, etc), then do: make install (If the configure script can't determine your type of computer, give it the name as an argument, for instance ``./configure sun4''. You can use the script ``config.sub'' to test whether a name is recognized; if it is, config.sub translates it to a triplet specifying CPU, vendor, and OS.) If you have more than one compiler on your system, it is often best to explicitly set CC in the environment before running configure, and to also set CC when running make. For example (assuming sh/bash/ksh): CC=gcc ./configure make A similar example using csh: setenv CC gcc ./configure make Much of the code and documentation enclosed is copyright by the Free Software Foundation, Inc. See the file COPYING or COPYING.LIB in the various directories, for a description of the GNU General Public License terms under which you can copy the files. REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info on where and how to report problems.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤梦飞123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值