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

linux gdb调试命令教程

Linux GDB调试命令教程

基础概念

GDB(GNU Debugger)是一个强大的调试工具,广泛用于Linux环境下的程序调试。它允许开发者查看程序的执行流程、变量的值、内存状态等,从而帮助定位和修复程序中的错误。

优势

  1. 灵活性:支持多种编程语言,如C、C++、Fortran等。
  2. 功能丰富:提供断点设置、单步执行、变量监控等多种调试功能。
  3. 跨平台:可在多种Unix-like系统上运行。

类型

  • 命令行界面:通过终端输入命令进行调试。
  • 图形界面:如DDD(Data Display Debugger),提供更直观的调试体验。

应用场景

  • 软件开发:在编写新代码时进行实时调试。
  • 故障排查:分析运行时出现的异常和崩溃。
  • 性能优化:通过监控程序执行来找出性能瓶颈。

常用命令及示例

  1. 启动GDB
  2. 启动GDB
  3. 或者附加到一个正在运行的进程:
  4. 或者附加到一个正在运行的进程:
  5. 设置断点
  6. 设置断点
  7. 或者在特定行设置断点:
  8. 或者在特定行设置断点:
  9. 运行程序
  10. 运行程序
  11. 单步执行
  12. 单步执行
  13. 查看变量值
  14. 查看变量值
  15. 继续执行直到下一个断点
  16. 继续执行直到下一个断点
  17. 退出GDB
  18. 退出GDB

遇到问题及解决方法

问题:程序在运行时崩溃,但无法确定具体位置。

解决方法

  1. 使用gdb启动程序:
  2. 使用gdb启动程序:
  3. 运行程序:
  4. 运行程序:
  5. 当程序崩溃时,GDB会显示崩溃的位置。使用backtrace命令查看调用栈:
  6. 当程序崩溃时,GDB会显示崩溃的位置。使用backtrace命令查看调用栈:
  7. 根据调用栈信息定位问题代码,并使用list命令查看相关代码:
  8. 根据调用栈信息定位问题代码,并使用list命令查看相关代码:

示例代码: 假设有一个简单的C程序example.c

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

int main() {
    int a = 10;
    int b = 0;
    int c = a / b;  // 这里会引发除以零错误
    printf("Result: %d\n", c);
    return 0;
}

编译并调试:

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

在GDB中:

代码语言:txt
复制
run
# 程序崩溃后
backtrace
list

通过这些步骤,可以清晰地看到问题出在int c = a / b;这一行。

总结

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
    领券