首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux gdb 命令

gdb(GNU Debugger)是Linux下的一款强大的调试工具,它允许开发者调试程序、设置断点、查看变量值、单步执行代码等。以下是关于gdb的一些基础概念、优势、类型(实际上是gdb的命令或功能类别)、应用场景以及常见问题的解答。

基础概念

gdb是一个命令行调试工具,它可以调试多种编程语言编写的程序,尤其是C和C++。通过gdb,开发者可以控制程序的执行流程,检查程序状态,以及诊断运行时错误。

优势

  • 强大的调试功能:支持设置断点、监视变量、查看调用栈等。
  • 灵活的控制:可以单步执行代码、跳过函数、继续执行到下一个断点等。
  • 跨平台:不仅可以在Linux上使用,还可以在其他UNIX-like系统以及Windows上使用。
  • 丰富的命令:提供了大量的命令来满足各种调试需求。

类型(命令或功能类别)

  • 断点命令break, delete, disable, enable等。
  • 执行控制命令run, continue, next, step, finish等。
  • 查看命令print, info locals, info args, backtrace等。
  • 其他命令load, save, shell, quit等。

应用场景

  • 程序调试:查找和修复程序中的bug。
  • 性能分析:虽然gdb主要用于调试,但也可以用来分析程序的执行流程。
  • 学习工具:通过调试来理解程序的运行机制。

常见问题及解决方法

1. 如何启动gdb

要启动gdb并调试一个程序,可以使用以下命令:

代码语言:txt
复制
gdb program_name

如果程序有调试信息(通常是使用-g选项编译的),gdb将加载该程序。

2. 如何设置断点?

使用break命令设置断点:

代码语言:txt
复制
break function_name

或者在特定行设置断点:

代码语言:txt
复制
break file_name:line_number

3. 如何运行程序?

gdb中,使用run命令来启动程序:

代码语言:txt
复制
run

如果需要传递命令行参数给程序,可以在run命令后添加参数:

代码语言:txt
复制
run arg1 arg2 arg3

4. 如何查看变量值?

使用print命令查看变量的值:

代码语言:txt
复制
print variable_name

5. 如何单步执行代码?

使用next命令来执行下一行代码,但不进入函数内部:

代码语言:txt
复制
next

使用step命令来执行下一行代码,并且如果当前行调用了函数,则进入该函数:

代码语言:txt
复制
step

6. 如何退出gdb

使用quit命令退出gdb

代码语言:txt
复制
quit

示例代码

假设我们有一个简单的C程序example.c

代码语言:txt
复制
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int x = 10;
    int y = 20;
    int z = add(x, y);
    printf("Sum is %d
", z);
    return 0;
}

编译程序时加上-g选项以包含调试信息:

代码语言:txt
复制
gcc -g example.c -o example

启动gdb并调试程序:

代码语言:txt
复制
gdb example

add函数处设置断点:

代码语言:txt
复制
break add

运行程序:

代码语言:txt
复制
run

当程序执行到add函数时,它会暂停。此时,可以使用nextstep命令来单步执行代码,使用print命令来查看变量值。

结论

gdb是一个非常强大的调试工具,它可以帮助开发者深入了解程序的运行状态,有效地定位和解决问题。通过掌握gdb的基本命令和技巧,可以大大提高调试效率。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux GDB jump 命令介绍

jump 命令基本用法是: jump location 可以是程序的行号或者函数的地址,jump 会让程序执行流跳转到指定位置执行,当然其行为也是不可控制的,例如您跳过了某个对象的初始化代码...jump 命令可以简写成 j,但是不可以简写成 jmp,其使用有一个注意事项,即如果 jump 跳转到的位置后续没有断点,那么 GDB 会执行完跳转处的代码会继续执行。...jump 命令除了跳过一些代码的执行外,还有一个妙用就是可以执行一些我们想要执行的代码,而这些代码在正常的逻辑下可能并不会执行(当然可能也因此会产生一些意外的结果,这需要读者自行斟酌使用)。...initServer” 、“b 2025”、“b 2027”在这个函数入口处、2025 行、2027 行增加三个断点,然后使用 run 命令重新运行一下程序,触发第一个断点后,继续输入 c 命令继续运行...本质上,jump 命令的作用类似于在 Visual Studio 中调试时,拖鼠标将程序从一个执行处拖到另外一个执行处。 ?

6.9K10
  • linux下gdb常用的调试命令

    用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法。...呵呵,有时迷茫了自己处在什么堆栈的深处,这是使用where命令能够清晰的看到自己的位置,有时在循环太多让人受不了了,可使用u或者finish或者jump命令来跳出去。...会从这个文件读取配置 cat ~/.gdb_history 呵呵,对于gdb时想要查看长的字符串老是显示不全,怎么半呢,gdb参看数组字符串时默认只是显示部分的数据,通过这个命令可以修改: set print...当程序显示函数信息时,GDB会显出函数的参数地址。...系统默认为打开的 set print object 在C++中,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用的规则显示输出,如果关闭这个选项的话,GDB

    3K20

    【linux】gdb

    01.gdb使用 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上...通过这个命令,你可以查看包含在 ELF 文件中的不同节(section),这些节可能包括代码段、数据段、符号表、字符串表等 #include int AddToTarget(int a...\n"); return 0; } gdb binFile 退出: ctrl + d 或 quit 调试命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。...s或step:进入函数调用 finish:执行到当前函数返回,然后挺下来等待命令 print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数 display 变量名...运行到下一个断点) until X行号:跳至X行 breaktrace(或bt):查看各级函数调用及参数 info(i) locals:查看当前栈帧局部变量的值 quit:退出gdb

    11610

    gdb命令总结

    help + 命令就可以查看这个命令的详细帮助信息 查看信息 info 我用过的 info share : info sharedlibrary 查看加载了什么库,地址好像不准,maps文件的才准...(其实直接输入sharedlibrary命令就行了,不过没有地址而已,不过那个地址也不准的样子) i b :查看断点 i r :查看寄存器, i r eax edx:只查看eax和edx 官方文档:...程序名 core文件路径 或者 gdb 程序名 –core core文件路径 调试命令 r 运行 c 继续运行,直到碰到断点或异常才会停止 ni 单步 si 步入 jump 跳到那里执行...运行到当前位置 info checkpoints 可以查看 restart 序号就可以切换了 最近发现的超好用的——202009 条件记录断点 类似windbg的条件记录断点效果 下了断点后,使用command命令...,加上断点的序号即可,之后就可以输入命令了,最后以end结尾就行 command gdb-peda$ bl Num Type Disp Enb

    7710

    Linux GDB常用命令一栏

    Linux GDB 常用命令如下: 1.启动和退出gdb (1)启动:gdb ***:显示一段版权说明; (*** 表示可执行程序名) (2)退出:quit。...(5)list t4.c :get_sum:显示源文件t4.c中第五行到第十行的代码,在跳是含有多个源文件的次序时使用; (6)如果在调试中运行linux命令,则可以在gdb的提示符下输入shell命令...如果想要详细了解gdb某个命令的使用方法,可以用help 命令 Example:(gdb)help list   (gdb)help all 4.设置和管理断点 (1)以行号设置断点:(gdb)break...单步执行一条语句使用next和step命令。通常一条语句有多条机器指令构成的。    注意的是:gdb的一些命令可以简写,比如list可以用li来代替,continue命令可以用cont来代替。...Linux GDB命令与Visual Studio Debug下命令对比:                                 Linux

    1.6K40

    初识Linux · 有关gdb

    前言: 当我们Linux学到了这里的时候,我们大概会有一种感觉是,从VS2022转战Linux,写代码对我们来说是一种重新构建读写代码的一个过程,从文本编辑器,到文本编译器,再到今天的调试器gdb,读写代码的每个部分在...Linux这里都是单独拉出来的,所以不免许多人会感受到困难,甚至于某些简单的代码在Linux这里都有点感觉晦涩难懂了,但是呢,难关总会过去的,咱们今天把gdb一看,我们就能再跨越代码的一大关卡 - 调试...输入以上命令即可,因为部分命令还没有涉及,这里先不做介绍。 以上就是调试信息,现在我们就该进入到调试了。...首先进入调试很简单,就是gdb + 可执行文件。但是前提是已经用gcc -g生成了二进制的调试文件,此时才可以使用gdb进行调试。...打断点用到的命令是Breakpoint,简称b,对应的操作有b 文件名:函数名/行号,或者直接b 函数名/行号: 那么断点就打好了,在VS里面,断点很显眼的来了个大红点,但是Linux中打了断点我们应该如何查看呢

    7410

    Linux gdb使用基础

    GDB简介 GDB(GNU Debugger)是Linux下一款C/C++程序调试工具,通过在命令行中执行相应的命令实现程序的调试,使用GDB时只需要在shell中输入gdb命令或gdb filename...GDB主要有以下功能: 设置断点 单步调试 查看变量的值 动态改变程序的执行环境 分析崩溃程序产生的core文件 GDB常用命令 命令 简写 含义 file - 装入待调试的可执行文件 run r 执行程序...This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details....(gdb) 首先输出一些系统信息,最后一行开头的(gdb)为命令提示符,输入start命令开始调试: (gdb) start Temporary breakpoint 1 at 0x67b: file...参考: 《精通Linux C编程》- 程国钢 《Linux C编程完全解密》- 闫敬 吴淑坤

    2.4K10

    linux工具---gdb调试~~进程

    1.gdb的简单介绍 1.1程序发布版本 程序的发布一般都是两个版本,debug模式和release模式,在linux里面的gcc/g++编译出来的这个结果默认就是release模式,要想使用这个gdb...进行调试,这个时候就必须在表一的时候加上-g选项,在debug的模式下面进行; 1.2前期准备 我们时候要进行安装gdb和环境的搭建,这个gdb好像是默认就有的,我们可以使用这个gdb --version...里面的PCB tast_struct就是linux里面的PCB,是linux里面的一种数据类型; task_struct里面包含的属性有:标识符,状态,优先级,程序计数器,上下文数据,I/O状态记录,内存指针等所有的属性...; linux里面使用双向链表组织进程 2.4查看进程 查看进程的指令就是ls /proc,这个proc实际上就是一个linux下面的目录; 当前目录概念:我们创建一个文件,我们没有去指定这个文件的位置...这个系统调用接口去查看这个进程的标识符,我们可以使用getppid这个接口去查看这个进程的父进程; 我们的任何一个进程都是bash进程的一个子进程,这个basn进程就是所有进程的父进程,这个bash对应的标识符可以使用对应的命令进行查看

    10610

    Linux调试器——gdb

    gdb 什么是gdb debug与release gdb的基本操作 查看代码与断点 执行与调试 监视变量 什么是gdb 之前用的一直都是VS编译器进行调试,调试是一个非常重要的过程,在Linux中调试需要用到一个工具就是...gdb。...在调试思路上VS编译器和gdb是一样的,但是调试过程的差距就很大了。 我们都知道Linux的操作都是通过命令完成的,调试也是一样的,靠的就是命令调试。...Linux环境下,gcc/g++编译出来的可执行程序默认是release模式 先来写一个程序验证一下 进入调试模式 gdb 你要调试的文件 后面的on debugging symbols...在VS编译器中,我们按F9是可以进行打断点的,再按一次可以取消: Linux进行打断点是:b 你要断点的行数 现在13行有一个断点,查看断点是info b: 断点也有自己的行,就是前面

    3.8K00

    【Linux】Linux调试器-gdb使用

    前言 在前面的博客【Linux】编译器-gcc/g++使用已经分享了关于编译器的使用,而编译器的使用离不开调试,这次就来分享一下Linux调试器-gdb使用。 2....gdb默认会记录用户最近的一条命令,直接按回车 就可以拿到全部的代码 如果查看第15行: 发现它并不是从15行开始,而15行差不多是在显示的代码中间的位置。...在vs里面要想启动断点,直接右击就会出现 而在gdb中重新启动,想要用到命令: enable Num 重新启动3号断点: enable 3 发现这里的3号断点的Enb就变为y了 3.5 next...在gdb中想要进入到函数的内部就用命令: step/s 打了一个断点在17行: 然后用来实现逐语句调试:发现进入到AddToTarget函数里面: 发现这个代码就在7和9行之间反复执行:...进入到函数体里面就退不出来 如果想要跳转到某一行,就用到命令: until 试一下跳转到12行: 总结一下gdb使用就是: set var:修改变量的值 把指定变量直接修改为目标值

    18210

    Linux中的gdb调试

    1、背景 在Linux命令行中,我们还不知道怎么调试我们编写的代码。...3、Linux命令语句界面下观察版本区别 gcc/g++ (文件) -g:让编译器在debug模式下编译 如何进行对比比较? 观察大小,因为debug版本下就是会新增一些信息。...4、使用gdb调试的命令 gdb (需要调试的文件):gdb使用方法 //在gdb情况之下的命令 list:查看源文件(可简写为 l ) l n:l是list的缩写,n代表的是查看第几行 l (文件名)...那么在Linux中的gdb下,我们应该怎么运行呢? 首先确保的是,程序得先运行起来。所以在gdb下 r/run:运行程序 可是直接运行的话就直接结束了,所以还要再run之前先打一个断点。...当然了,能够查看变量的值,也能够查看变量的地址 p &(变量的名称) 还是不够,我们再vs里面查询数值之后就能够直接显示再下面,我们能不能再Linux的gdb也常显示再下方,不要一次一次的重新输入语句来查看变量值呢

    15010
    领券