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

linux调试命令gdb

GDB(GNU Debugger)是Linux下常用的命令行调试工具。以下是对GDB的详细介绍:

基础概念

GDB是一个功能强大的调试器,它允许程序员在程序运行时检查和控制程序的执行。通过GDB,可以设置断点、单步执行代码、查看变量值、检查堆栈跟踪等,从而帮助定位和修复程序中的错误。

相关优势

  1. 跨平台支持:GDB支持多种处理器架构和操作系统。
  2. 强大的调试功能:包括设置断点、观察点、条件断点等。
  3. 灵活的命令行接口:允许用户自定义调试过程。
  4. 与GCC集成:作为GCC编译器套件的一部分,方便使用。

类型与应用场景

  • 类型:GDB主要分为命令行版本和图形化版本(如DDD)。
  • 应用场景:适用于C、C++等语言的调试,特别是在嵌入式系统、服务器端程序等复杂环境中。

常见问题及解决方法

  1. 无法启动GDB
    • 确保已安装GDB,并且路径正确。
    • 检查可执行文件是否为目标架构(如x86_64)。
  • 断点不生效
    • 确保断点设置在有效的代码行上。
    • 检查是否有优化选项影响了断点的设置。
  • 变量值不正确
    • 确保在正确的上下文中查看变量值。
    • 使用print命令时,确保变量名拼写正确。

示例代码

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

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

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

编译并使用GDB调试:

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

在GDB中设置断点并运行:

代码语言:txt
复制
(gdb) break main
Breakpoint 1 at 0x4004ed: file example.c, line 5.
(gdb) run
Starting program: /path/to/example 

Breakpoint 1, main () at example.c:5
5           int x = 10;
(gdb) next
6           int y = 20;
(gdb) print x
$1 = 10
(gdb) continue
Continuing.
Sum: 30
[Inferior 1 (process 1234) exited normally]

通过以上步骤,可以在GDB中逐步执行代码并查看变量值。

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

相关·内容

linux下gdb常用的调试命令

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

3K20
  • gdb调试基础命令

    gdb调试 复习并整理gdb 1. 调试准备 被调试的程序需要生成调试符号信息,即在gcc/g++编译时加上-g选项。...常用命令详解 3.1 run gdb+filename是指attach到一个调试文件,并没有启动,使用run(r)启动 (gdb) r Starting program: /home/doper/github...4. gdb调试多线程程序 4.1 调试多线程程序的方法 先gdb让程序跑起来,然后Ctrl+C中断程序,使用Info threads命令查看当前进程下有多少线程在运行。...set scheduler-locking step当且仅当使用next或step命令做单步调试时会锁定当前线程,如果使用until,finish,return等线程内调试命令(它们不是单步控制命令),...5. gdb调试多进程程序 5.1 方法一 先在一个shell窗口中调试父进程,等待子进程被fork出来后,再开启另外一个shell窗口使用gdb attach命令将gdb attach到子进程上。

    1.7K10

    Linux调试器——gdb

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

    3.8K00

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

    1.gdb的简单介绍 1.1程序发布版本 程序的发布一般都是两个版本,debug模式和release模式,在linux里面的gcc/g++编译出来的这个结果默认就是release模式,要想使用这个gdb...进行调试,这个时候就必须在表一的时候加上-g选项,在debug的模式下面进行; 1.2前期准备 我们时候要进行安装gdb和环境的搭建,这个gdb好像是默认就有的,我们可以使用这个gdb --version...,其他的这个makefile文件的内容都是不变的; 1.3调试开始和结束 gdb后面加上这个当前目录下面的生成的文件的名字,出现的这个括号gdb加上这个闪动的光标就是想要我们输入这个调试的相关的指令;...; linux里面使用双向链表组织进程 2.4查看进程 查看进程的指令就是ls /proc,这个proc实际上就是一个linux下面的目录; 当前目录概念:我们创建一个文件,我们没有去指定这个文件的位置...这个系统调用接口去查看这个进程的标识符,我们可以使用getppid这个接口去查看这个进程的父进程; 我们的任何一个进程都是bash进程的一个子进程,这个basn进程就是所有进程的父进程,这个bash对应的标识符可以使用对应的命令进行查看

    10610

    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之前先打一个断点。...disable n:关闭n号断点的效果 如果运行过程中突然不想运行了,或者换句话说是想要重新运行的话,就需要再输入一遍run命令 再选择y,就能够实现重新运行调试。

    15010

    gdb调试容器和命令保存

    一、gdb调试容器或者智能指针的内容 有时候我们需要debug一些core文件或者程序,但是如果遇到STL容器,p打印出的是一些红黑树或者原始的数据机构,这给我们调试带来不必要的麻烦。...在gdb调试的时候,使用source ~/.gdbinit加载这些宏操作。 如果你的gdb在运行当中,需要重启启用下,这些宏才生效。 阅读这些代码宏,也可以帮助你理解stl结构。...顺带说下,在~/.gdbinit可以放入你常用的一些gdb设置命令。...调试历史保存 还有一个比较有用的是保存gdb调试历史,set history save on 一个相关的命令是set history remove-duplicates ....该命令是“控制删除命令历史列表中重复的历史条目。如果计数不为零,gdb 将回顾最后计数的历史条目并删除与当前条目重复的第一个条目。添加到命令历史列表中。如果计数是无限制的,那么此后视是无界的。

    1.9K400

    GDB 常用的调试命令概览

    GDB 常用命令列表 命令名称 命令缩写 命令说明 run r 运行一个程序 continue c 让暂停的程序继续运行 next n 运行到下一行 step s 如果有调用函数,进入调用的函数内部,相当于...监视某一个变量或内存地址的值是否发生变化 list l 显示源码 info info 查看断点 / 线程等信息 ptype ptype 查看变量类型 disassemble dis 查看汇编代码 set args 设置程序启动命令行参数...show args 查看设置的命令行参数 扩充: gcc 常用选项 选项 选项说明 -v 查看gcc版本号 -I (大写 i ) 指定头文件目录,注意-I和目录之间没有空格 -c 只编译,生成.o...文件,不进行链接 -o 输出成指定文件名 -g 包含调试信息 -On n=0∼3 编译优化,n越大优化得越多 -Wall 提示更多警告信息 -E 生成预处理文件 -M 生成.c文件与头文件依赖关系以用于

    2.2K20

    【Linux】Linux调试器-gdb使用

    前言 在前面的博客【Linux】编译器-gcc/g++使用已经分享了关于编译器的使用,而编译器的使用离不开调试,这次就来分享一下Linux调试器-gdb使用。 2....使用 3.1 进入gdb 默认系统中会安装gdb,使用方法就是gdb后面直接加上调试的可执行程序名: gdb myprocess-debug 就会默认进入到调试模式 想要退出就直接输入quit或者...在gdb中想要实现逐过程就得用到命令: next/n 打了一个断点在17行: 然后用来实现逐过程调试:发现并没有进入到AddToTarget函数里面: 3.6 step/s逐语句 在在vs里面的...在gdb中想要进入到函数的内部就用命令: step/s 打了一个断点在17行: 然后用来实现逐语句调试:发现进入到AddToTarget函数里面: 发现这个代码就在7和9行之间反复执行:...而在gdb中想要一个部分一个部分的调试,从而方便找出代码的问题,就用到命令: continue/c 先打一些断点; 此时运行的时候就发现在17行就停下来了: 想要直接从一个断点运行到下一个断点处就直接

    18210

    【Linux】Linux调试器-gdb使用

    背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项...初次使用时,需要先安装: sudo yum install -y gdb 使用 注意使用gdb时,调试的是debug模式。...finish:执行到当前函数返回,然后停下来等待命令 print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 p 变量:打印变量值。...取消对先前设置的那些变量的跟踪 until X行号:跳至X行(中间的代码都是运行了的) breaktrace(或bt):查看各级函数调用及参数 info(i) locals:查看当前栈帧局部变量的值 quit:退出gdb...在调试过程中是可以修改变量的值的,用set var 修改变量。通常用来判断循环条件,这样做可能会导致最终的值不正确。

    27800

    Linux调试器-gdb使用

    Debug模式下程序是可以被调试的,release模式下不可调试。Debug模式下编译器形成可执行程序的时候,会给可执行程序添加调试信息 。...Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 生成Debug模式下的文件:gcc -o process-Dubeg...-S//查看一个可执行程序对应的二进制文件 readelf process.exe-Debug -S | grep debug//将二进制文件中和debug有关的部分过滤出来 gdb命令 为了演示gdb...命令的使用方法,以下面这个代码为例: #include int AddToTarget(int start,int end) { int i=start...\n"); return 0; } ~ gdb binFile进入gdb环境,其中binFile是一个可执行程序 q或者quit指令可退出 list或者l:现实binFile

    13110

    Linux系统下gdb调试(一)

    Linux 下的GDB(GNU Debugger)是-一个用来调试C、C++程序的功能强大的调试器,它能够在程序运行的过程中观察程序的内部结构和内存的使用情况。...3、gdb命令+实战演示: gdb的使用非常简单,只要在Linux的命令提示符下输入gdb命令,系统便会启动gdb。...也可以在gdb后面给出文件名,直接指定想要调试的程序,gdb就会自动调用这个可执行文件进行调试。命令形式如下: #gdb filename 告诉gdb装入名为filename的可执行文件进行调试。...This GDB was configured as "x86_64-linux-gnu"....但是你在Linux环境编译的时候会报一个警告,不会报错,不细心的人,可能平常习惯了说有警告没啥关系,然后就直接运行,可以后面没想到,出现了下面这种情况: 下面我们使用gdb来调试这个程序:

    4.5K10

    Linux下GDB调试指令总结

    摘要 之前写C++的一些程序都是在windows下,直接使用VS2017的傻瓜式编译器,最近尝试摸索在linux进行C++程序的编译,有了一些成果!特此总结!...代码调试器:避免不了,程序会出现bug,但是使用命令行编译出错后是没有调试信息的(g++编译时),因此我们需要使用gdb对程序进行调试。 ?...这次主要介绍GDB指令,其他编译方法和指令请自行上网查询! 启动gdb后,可以进入到交互模式,通过以下命令对程序完成调试工作!...step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的 until(简写u):当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。...gdb_test() 函数 print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数 display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后

    4.6K20

    linux GDB调试c++程序

    GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。...或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。...从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能...gdb基本命令列表:    ? 实例: 1 新建一个源文件vi swap.cc ?...3.启动调试 gdb swap ?        3.1  查看源文件 list 1,回车重复上一次指令 ?

    4.7K20
    领券