精华内容
下载资源
问答
  • GDB调试教程

    2016-03-28 15:48:57
    GDB调试教程
  • GDB调试教程收录

    2019-08-29 11:38:26
    GDB调试教程收录 https://blog.csdn.net/liigo/article/details/582231/ windows下gdb调试简易教程,简单示例; https://www.cnblogs.com/HKUI/p/8955443.html gdb调试命令大全(可用作查询字典); ...

    GDB调试教程收录

    https://blog.csdn.net/liigo/article/details/582231/
    windows下gdb调试简易教程,简单示例;

    https://www.cnblogs.com/HKUI/p/8955443.html
    gdb调试命令大全(可用作查询字典);

    https://blog.csdn.net/LF_2016/article/details/54172864
    linux下gdb调试简单教程

    https://www.jianshu.com/p/adcf474f5561
    Linux下gdb调试教程(详细)

    展开全文
  • 收集起来 博主链接:...   用GDB调试程序(一) 用GDB调试程序(二) 用GDB调试程序(三) ...用GDB调试程序(四) ...用GDB调试程序(五) ...用GDB调试程序(六) ...用GDB调试程序(七)...
    展开全文
  • 【Linux】GDB调试教程(新手小白)

    千次阅读 2020-10-21 16:49:51
    GDB,全称 GNU symbolic debugger,简称 GDB调试器,是 Linux 平台下最常用的一款程序调试器 2. GDB安装教程 CentOSx下安装GDB 1)检查机器上是否安装gdb rpm -qa | grep gdb [root@]# rp..

    目录

    1. GDB简介

    2. GDB安装教程

    1)检查机器上是否安装gdb

    2) 下载gdb源码包

    3) 解压gdb源码包

    4) 安装

    5) 检查是否安装成功

    3. GDB入门操作

    1)创建测试代码

    2)启动gdb

    3)断点

    4)运行

    5)打印变量的的值

    6)退出gdb

    参考文章

     


    1. GDB简介

    GDB,全称 GNU symbolic debugger,简称 GDB调试器,是 Linux 平台下最常用的一款程序调试器

    2. GDB安装教程

    CentOSx下安装GDB

    1)检查机器上是否安装gdb

    rpm -qa | grep gdb

    [root@]# rpm -qa | grep gdb
    gdbm-1.10-8.el7.x86_64
    gdbm-devel-1.10-8.el7.x86_64

    若安装,则采用以下命令卸载

    rpm -e --nodeps [软件版本]

    [root@]# rpm -e --nodeps gdbm-1.10-8.el7.x86_64
    [root@]# rpm -e --nodeps gdbm-devel-1.10-8.el7.x86_64

    2) 下载gdb源码包

    wget http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.1.tar.xz

    [root@]# wget http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.1.tar.xz
    --2020-10-19 15:05:39--  http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.1.tar.xz
    Resolving mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)... 202.141.176.110, 218.104.71.170, 2001:da8:d800:95::110
    Connecting to mirrors.ustc.edu.cn (mirrors.ustc.edu.cn)|202.141.176.110|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 17867692 (17M) [application/octet-stream]
    Saving to: ‘gdb-7.9.1.tar.xz’
    
    100%[====================================================================================================================================================>] 17,867,692  36.5MB/s   in 0.5s   
    
    2020-10-19 15:05:39 (36.5 MB/s) - ‘gdb-7.9.1.tar.xz’ saved [17867692/17867692]

    3) 解压gdb源码包

    tar -xf gdb-7.9.1.tar.xz

    [root@]# tar -xf gdb-7.9.1.tar.xz

    4) 安装

    cd gdb-7.9.1

    sudo yum install texinfo

    ./configure

    make

    sudo make install

    [root@]# cd gdb-7.9.1
    [root@]# sudo yum install texinfo
    .
    .
    .
    Dependency Installed:
      perl-Text-Unidecode.noarch 0:0.04-20.el7          perl-libintl.x86_64 0:1.20-12.el7         
    
    Complete!
    [root@]# ./configure
    .
    .
    .
    configure: creating ./config.status
    config.status: creating Makefile
    [root@]# make
    .
    .
    .
    make[1]: Nothing to be done for `all-target'.
    make[1]: Leaving directory `/root/.vimplus/gdb-7.9.1'
    [root@]# make install
    .
    .
    .
    make[1]: Nothing to be done for `install-target'.
    make[1]: Leaving directory `/root/.vimplus/gdb-7.9.1'

    5) 检查是否安装成功

    gdb -v

    [root@]# gdb -v
    GNU gdb (GDB) 7.9.1
    Copyright (C) 2015 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-unknown-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word".

    3. GDB入门操作

    命令               简写形式         说明
    backtrace          bt、where       显示backtrace
    break              b               设置断点
    continue           c、cont         继续执行
    delete             d               删除断点
    finish                             运行到函数结束
    info breakpoints                   显示断点信息
    next               n               执行下一行
    print              p               显示表达式
    run                r               运行程序
    step               s               一次执行一行,包括函数内部
    x                                  显示内存内容
    until              u               执行到指定行
    其他命令
    directory          dir             插入目录
    disable            dis             禁用断点
    down               do              在当前调用的栈帧中选择要显示的栈帧
    edit               e               编辑文件或者函数
    frame              f               选择要显示的栈帧
    forward-search     fo              向前搜索
    generate-core-file gcore           生成内核转存储
    help                h              显示帮助一览
    info                i              显示信息
    list                l              显示函数或行
    nexti               ni             执行下一行(以汇编代码为单位)
    print-object        po             显示目标信息
    sharelibrary        share          加载共享的符号
    stepi               si             执行下一行
    

    1)创建测试代码

    vim test.c

    gcc -g -o test.exe test.c

    关于vim/vi的用法这里不再概述,推荐vim的配置程序vimplus

    写完代码后,gcc编译代码(PS. 如果gcc编译的时候没有加上-g参数,那么就不会保留调试参数,就不能用gdb调试)

    测试代码如下:

    #include<stdio.h>
    #include<stdlib.h>
     
    int main( int argc , char *argv[] )  
    {
        int a = 1;
        int i = 0;
        int b[3] = {0,1,2};
        for(i = 0; i < 3;i++)
            b[i] = b[i] + 1;
        printf("%d\n",a);
        int *p;
        p = b;
        printf("%d\n",p[0]);
        return 0;
    }

    2)启动gdb

           在 Linux 操作系统中,当程序执行发生异常崩溃时,系统可以将发生崩溃时的内存数据、调用堆栈情况等信息自动记录下载,并存储到一个文件中,该文件通常称为 core 文件,Linux 系统所具备的这种功能又称为核心转储(core dump)。幸运的是,GDB 对 core 文件的分析和调试提供有非常强大的功能支持,当程序发生异常崩溃时,通过 GDB 调试产生的 core 文件,往往可以更快速的解决问题。

    • 查看是否开启 core dump 这一功能

    ulimit -a

    [root@]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 7284
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 7284
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    如果 core file size(core 文件大小)对应的值为 0,表示当前系统未开启 core dump 功能

    • 开启 core dump

    ulimit -c unlimited

    [root@]# ulimit -c unlimited
    [root@]# ulimit -a
    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 7284
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 7284
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    unlimited 表示不限制 core 文件的大小

    测试代码:

    1 #include <stdio.h>
      2 
      3 int main()
      4 {
      5     char *p = NULL;                                                                    
      6     *p = 123;
      7     return 0;
      8 }

    测试结果:

    [root@]# vim main.c
    [root@]# gcc -g -o main.exe main.c
    [root@]# ls
    main.c  main.exe  test.c  test.exe
    [root@]# ./main.exe
    Segmentation fault (core dumped)
    [root@]# ls
    core.17313  main.c  main.exe  test.c  test.exe

    测试代码中,发生内存访问错误,程序崩溃,崩溃信息存入core.17313文件中

    • 启动gdb

    gdb test.exe

    [root@]# gdb test.exe
    GNU gdb (GDB) 7.9.1
    Copyright (C) 2015 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-unknown-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from test.exe...done.
    (gdb)_

    3)断点

    • 根据行号设置断点

    第一种  (gdb) b 5 

    第二种  (gdb) b test.c:5

    • 根据函数设置断点

    (gdb) b main

    • 根据条件设置断点

    (gdb) b test.c:10 if a == 1

    • 根据偏移量设置断点

    (gdb) b +12

    • 根据地址设置断点

    (gdb) b *0x40059b

    • 设置临时断点

    临时断点只生效一次

    (gdb) tbreak test.c:12

    (gdb) b test.c:5
    Breakpoint 1 at 0x40053c: file test.c, line 5.
    (gdb) b main
    Note: breakpoint 1 also set at pc 0x40053c.
    Breakpoint 2 at 0x40053c: file test.c, line 6.
    (gdb) b test.c:10 if a == 1
    Breakpoint 3 at 0x400568: file test.c, line 10.
    (gdb) b +12
    Breakpoint 4 at 0x40059b: file test.c, line 13.
    (gdb) b *0x40059b
    Note: breakpoint 4 also set at pc 0x40059b.
    Breakpoint 5 at 0x40059b: file test.c, line 13.
    (gdb) tbreak test.c:12
    Note: breakpoints 4 and 5 also set at pc 0x40059b.
    Temporary breakpoint 6 at 0x40059b: file test.c, line 12.
    • 显示所有断点

    (gdb) info break

    (gdb) info break
    Num     Type           Disp Enb Address            What
    1       breakpoint     keep y   0x000000000040053c in main at test.c:5
    2       breakpoint     keep y   0x000000000040053c in main at test.c:6
    3       breakpoint     keep y   0x0000000000400568 in main at test.c:10
            stop only if a == 1
    4       breakpoint     keep y   0x000000000040059b in main at test.c:13
    5       breakpoint     keep y   0x000000000040059b in main at test.c:13
    6       breakpoint     del  y   0x000000000040059b in main at test.c:12
    • 清除断点

    清除某个断点 (gdb) delete 4

    清除所有断点 (gdb) delete 

    (gdb) delete 4
    (gdb) delete
    Delete all breakpoints? (y or n) y
    (gdb) info break
    No breakpoints or watchpoints.

    清除当前行断点  (gdb) clear

    Breakpoint 3, main (argc=1, argv=0x7fffffffe508) at test.c:13
    13          p = b;
    (gdb) clear
    Deleted breakpoint 3 

    4)运行

    • 运行和继续

    运行 r

    继续单步调试 n

    继续执行到下一个断点 c

    • 查看源码和行号

    l

    (gdb) l
    1       #include <stdio.h>
    2       #include <stdlib.h>
    3
    4       int main( int argc, char *argv[])
    5       {
    6           int a = 1;
    7           int i = 0;
    8           int b[3] = {0, 1, 2};
    9           for (i = 0; i < 3; i++)
    10              b[i] = b[i] + 1;
    (gdb) l
    11          printf("%d\n", a);
    12          int *p;
    13          p = b;
    14          printf("%d\n", p[0]);
    15          return 0;
    16      }
    (gdb) l
    Line number 17 out of range; test.c has 16 lines.

    5)打印变量的的值

    • 打印变量

    p a

    • 打印指针

    p p

    • 打印main函数中的变量a

    p 'main'::a

    • 打印指针指向的内容,@后面跟的是打印的长度

    p *p@3

    (gdb) run
    Starting program: /root/daizhh/test.exe 
    
    Breakpoint 1, main (argc=1, argv=0x7fffffffe508) at test.c:11
    11          printf("%d\n", a);
    (gdb) p a
    $1 = 1
    (gdb) p b
    $2 = {1, 2, 3}
    (gdb) n
    1
    13          p = b;
    (gdb) c
    Continuing.
    
    Breakpoint 2, main (argc=1, argv=0x7fffffffe508) at test.c:14
    14          printf("%d\n", p[0]);
    (gdb) p p
    $3 = (int *) 0x7fffffffe400
    (gdb) p 'main'::a
    $4 = 1
    (gdb) p *p@3
    $5 = {1, 2, 3}
    • 设置变量打印

    set $index = 0

    p p[$index]

    (gdb) set $index = 0
    (gdb) p p[$index]
    $6 = 1
    • 设置打印格式
    1. x 按十六进制格式显示变量
    2. d 按十进制格式显示变量
    3. u 按十六进制格式显示无符号整型
    4. o 按八进制格式显示变量
    5. t 按二进制格式显示变量
    6. a 按十六进制格式显示变量
    7. c 按字符格式显示变量
    8. f 按浮点数格式显示变量

    (gdb) p/x a(按十六进制格式显示变量)

    (gdb) p/x a
    $7 = 0x1

    6)退出gdb

    q


    参考文章

    http://c.biancheng.net/gdb/

    https://blog.csdn.net/wh_computers/article/details/94618240

    https://blog.csdn.net/andrewgithub/article/details/88210949

    展开全文
  • GDB调试教程【一】

    2017-04-05 19:24:21
    我的MinGw 不能调试了 情急之下我学会GDB调试 正文开始 一、调试准备 按Win+R 进入运行界面  输入“cmd” 【如上】 进入 这个☟界面 【原来的界面是黑底白字 可以在“属性”里面调颜色】 先进入你要...

    我的MinGw 不能调试了 情急之下我学会GDB调试

    正文开始

    一、调试准备

    按Win+R  进入运行界面 

    输入“cmd” 【如上】

    进入 这个☟界面


    【原来的界面是黑底白字 可以在“属性”里面调颜色】

    先进入你要运行的文件的目录

               1、输入 E:【我要调试的文件所在的盘】

       2、输入 cd  【cd 后加上你的文件的地址】

    输入 set path=C:\Program Files\MinGWStudio\MinGW\bin【你的gdb文件的地址】

    如图



    输入  g++ -g 1226.cpp -o 1226  


    二、调试

    输入 gdb  进入gdb 界面 

    输入 file 【file  后跟你的文件名 注意这个文件名不能有后缀 如.cpp .c 之类的】

    输入 r/run  就可以了运行了 

    这里 要注意的是 

    如果你的 程序是屏幕输入输出的话就会直接显示答案 

     如果你的程序是文件输入输出的话就得进入输出文件查看输出 屏幕上 只会显示 这样”Program exited normally.“一段话 

    表示你的程序正常退出了

    _________________________________________________________________________________________

    现在就会这么多 等会儿再学点 再来更新

    【end】




    展开全文
  • Linux至GDB调试教程

    2017-07-27 16:26:04
    1 、安装GDB [html] view plain copy  print? sudo apt-get install gdb  2 、怎么打断点 1 、源文件的某一行设置断点 [html] view plain copy  ...
  • linux 下GDB调试教程

    2014-12-29 21:59:23
    或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这
  • http://c.biancheng.net/gdb/
  • 网上一篇非常有用的文章,值得在LINUX下C++开发人员一观!...学习使用了GDB一段时间后,发现它真的好强大!...GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢...
  • 编程环境 系统:CentOs 7.4版本 编译器:gcc 4.8.5版本 debug:gdb 7.6.1版本 文本编辑器:VScode or VIM 调试准备工作 ...gdb常用命令: ...gcc/g++ -g test.c/test.cpp 调试前先对源文件进行编译,... gdb a.out ...
  • Gdb调试

    2021-01-11 22:38:14
    gdb调试教程 例程 #include <stdio.h> int main () { unsigned long long int n, sum; n = 1; sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; } return 0; } 前期准备 生成可供调试的...
  • GDB调试程序详细教程

    2019-03-09 00:15:56
    GDB调试程序(一) 用GDB调试程序(二) 用GDB调试程序(三) 用GDB调试程序(四) 用GDB调试程序(五) 用GDB调试程序(六) 用GDB调试程序(七)
  • GDB调试教程

    2019-10-06 19:37:44
    启动和退出GDBGDB(GNU Project Debugger)几乎适用于所有类Unix系统,小巧方便且不失功能强大,Linux/Unix程序员经常用它来调试程序。 总的来说有几下几种方法启动GDB gdb(不加任何参数),如果不希望打印授权...
  • GDB调试简易教程

    千次阅读 2018-03-07 15:42:03
    是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x。一、表达式print和许多GDB的命令一样,可以接受一个表达式,GDB会根
  • GDB调试工具教程

    2012-12-05 15:51:56
    GDB是一个强大的命令行调试工具。GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件...
  • linux gdb调试_学习GDB

    2020-11-30 14:41:55
    1、陈皓GDB调试教程链接汇总-云栖社区-阿里云​yq.aliyun.com2、守望:GDB调试入门指南​zhuanlan.zhihu.com3、Linux Tools Quick Tutorial​linuxtools-rst.readthedocs.io以上....都是使用GDB前自己搜到觉得有用的...
  • GDB调试10分钟教程

    2017-07-07 13:52:19
    GDB调试
  • 使用gdb调试程序完全教程
  • 背景在macOS上,用于debug的工具有lldb和gdb. 其中lldb作为一种可复用的组件,参与了... 而gdb是GNU项目的调试器,支持Windows和大多数UNIX变种,也包括macOS.相比而言,lldb是苹果的"亲儿子",所以当我们调试Objec...
  • gdb调试命令

    2020-05-12 15:40:48
    gdb调试命令 即使对于一个经验非常丰富的程序员,在编写程序的时候也避免不了出错。程序中的语法错误通常可以在翻译阶段就能被诊断出来,但逻辑错误却很难被发现和纠正,比如在解决问题时使用了错误或者不完备的思路...
  • Linux GDB调试完全教程

    千次阅读 2016-11-10 14:57:50
    本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。 ...之所以要调试程序,是因为程序的运行结果和预期结果不一致,...调试器(如GDB)的目的是允许你在程序运行时进入到某个程序内部去看看该程序在做什
  • 在嵌入式系统中经常会用到GDB调试工具,今天我就通过一个实例说明这个工具的原理及应用。
  • GDB调试教程(一):热身游戏

    千次阅读 2018-08-17 18:41:11
    GDB(GNU Project Debugger)几乎适用于所有类Unix系统,小巧方便且不失功能强大,是Linux和Mac程序员经常用它来调试程序。 总的来说有几下几种方法启动GDB gdb(不加任何参数),如果不希望打印授权信息加上-...
  • GDB 进行调试 使用心得 1: 对于在应用程序中加入参数进行调试的方法:  直接用 gdb app -p1 -p2 这样进行调试是不行的。  需要像以下这样使用:  #gdb app  (gdb) r -p1 -p2  或者在运行run命令前使用set...
  • linux使用gdb调试程序完全教程

    千次阅读 2015-01-25 14:03:16
    GDB概述 ...或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 589
精华内容 235
关键字:

gdb调试教程