gdb 订阅
UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。 展开全文
UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。
信息
类    型
强大的UNIX下的程序调试工具
平    台
UNIX及UNIX-like
发布组织
GNU开源组织
功    能
动态的改变你程序的执行环境等
优    点
具有修复网络断点以及恢复链接等功能
外文名
GDB
gdb功能
一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
收起全文
精华内容
下载资源
问答
  • gdb

    万次阅读 2018-04-13 19:26:21
    gdb GUN Debugger 注意 在程序编译过程中,使用-g选项 gcc -g -o test test.c gdb filename 这里的filename是可执行文件,而不是源文件 基本命令 file命令 quit: shell: 切入shell当中 exit:从...

    gdb

    GUN Debugger

    注意

    在程序编译过程中,使用-g选项
    gcc -g -o test test.c

    gdb filename
    这里的filename是可执行文件,而不是源文件

    基本命令

    file命令

    quit:
    shell: 切入shell当中

    exit:从shell界面退出到gdb

    list:列出调试程序的源代码
    list
    list n
    list begin,end
    list -
    list +

    show listsize:显示list默认显示的行数
    set listsize n:修改list默认显示的行数为n行

    控制程序的执行

    break:设置断点
    break 10:在第10行设置断点
    break main:在main函数处设置断点

    info breakpoints(info break):查看断点

    delete:删除所有断点
    delete n:删除编号为n号的断点

    程序的运行

    run:运行程序,执行到断点处,或者直到程序结束
    next(n):单步执行,不进入函数内部
    step:单步执行,进入函数内部
    continue:程序从当前位置开始运行,直到断点处,或者直到程序结束
    kill:终止本次调试

    查看运行时的数据:
    print:查看变量的值/表达式的值
    print i
    print i*j
    print arry[n]@m //显示从下标为n开始的m个数

    set:修改变量的值
    set variable j=10
    print j=10

    display:动态观察变量的值
    info display:显示当前设置的表达式的清单
    delete display:取消对设置的表达式的自动显示功能

    显示函数调用堆栈的信息

    点击此处查看gdb调试多进程程序

    展开全文
  • GDB

    千次阅读 2019-07-07 10:42:57
    1.GDB GDB(the GNU Project Debugger)是 GNU 发布的一个功能强大的 UNIX 程序调试工具,可以调试 Ada、C、C++、Objective-C 和 Pascal 等多种语言的程序,可以在大多数 UNIX 和Microsoft Windows 变种上运行。GDB...

    1.GDB 

    GDB(the GNU Project Debugger)是 GNU 发布的一个功能强大的 UNIX 程序调试工具,可以调试 Ada、C、C++、Objective-C 和 Pascal 等多种语言的程序,可以在大多数 UNIX 和Microsoft Windows 变种上运行。GDB 既可以在本地调试,也可以进行远程调试。

    通过 GDB 能够对程序进行如下调试:
    ● 运行程序,还可以给程序加上某些参数,指定程序的行为。
    ● 使程序在特定的条件下停止。
    ● 检查程序停止时的运行状态。
    ● 改变程序的参数,以纠正程序中的错误。

    2.GDB  基本命令

    需要使用 GDB 调试的程序,在编译的时候必须加-g 参数,开启调试信息。运行 GDB调试程序通常使用如下方式:
    $ gdb <程序名称>
    在 GDB 的命令提示符,输入 help,能够得到 GDB 命令的分类,主要有:
    ● aliases 命令别名
    ● breakpoints 断点设置
    ● data 数据查看
    ● files 指定和检查文件
    ● internals 维护命令
    ● running 运行程序
    ● stack 检查堆栈
    ● status 状态查看
    ● tracepoints 跟踪程序

    基本命令:

    break  ----------------设置断点:break + 要设置断点的行号
    clear  -----------------清除断点:clear + 要清除断点的行号
    delete  ---------------用于清除断点和自动显示的表达式的命令
    disable  -------------让所设断点暂时失效。如果要让多个编号处的断点失效可将编号用空格隔开

    enable -------------- 与 disable 相对
    run  -------------------运行调试程序
    countinue  ----------继续执行正在调试的程序
    file  --------------------装入想要调试的可执行文件
    kill  --------------------终止正在调试的程序
    list  --------------------列出产生执行文件的源代码的一部分
    next  ------------------执行一行源代码但不进入函数内部
    step  ------------------执行一行源代码而且进入函数内部
    run  -------------------执行当前被调试的程序
    quit  ------------------终止 gdb
    watch  ---------------监视一个变量的值而不管它何时被改变
    make  ---------------在 GDB 中重新产生可执行文件
    shell  -----------------在 gdb 中执行 UNIX shell 命令

    where ----------------查看程序可能出错的地方

     

    展开全文
  • linux下gdb调试方法与技巧整理

    万次阅读 多人点赞 2019-06-13 13:45:49
    目录一、gdb简介二、gdb使用流程1、启动gdb2、查看源码3、运行程序4、设置断点5、单步执行6、查看变量7、退出gdb三、gdb基本使用命令1、运行命令2、设置断点3、查看源码4、打印表达式5、查看运行信息6、分割窗口7、...

    一、gdb简介

    GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;

    二、gdb使用流程

    这里用c程序做基本演示,c++程序也是一样的;

    1、启动gdb

    编译一个测试程序,-g表示可以调试,命令如下:

    gcc -g test.c -o test
    

    启动gdb,命令如下:

    gdb test 
    gdb -q test //表示不打印gdb版本信息,界面较为干净;
    

    测试如下:

    root@ubuntu:/home/eit/c_test# gdb test
    GNU gdb (Ubuntu 7.7-0ubuntu3) 7.7
    Copyright (C) 2014 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-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...done.
    (gdb) q
    
    root@ubuntu:/home/eit/c_test# gdb -q test
    Reading symbols from test...done.
    (gdb) 
    

    到此gdb启动完成!

    2、查看源码

    list(简写 l): 查看源程序代码,默认显示10行,按回车键继续看余下的。
    测试如下:

    (gdb) list 
    9	#define MAX_SIZE
    10	
    11	int main()
    12	{
    13	    int i,fd,size1 ,size2 ,len;
    14	    char *buf = "helo!I'm liujiangyong ";
    15	    char buf_r[15];
    16	    len = strlen(buf);
    17	    fd = open("/home/hello.txt",O_CREAT | O_TRUNC | O_RDWR,0666);
    18	    if (fd<0)
    (gdb) 
    19	        {
    20	            perror("open :");
    21	            exit(1);
    22	        }
    23	    else
    24	        {
    25	        printf("open file:hello.txt %d\n",fd);
    26	        }
    27	    size1 = write(fd,buf,len);
    28	    if (fd<0)
    (gdb) 
    29	    {
    30	        printf("writre erro;");
    31	
    32	    }
    33	    else
    34	    {
    35	        printf("写入的长度:%d\n写入文本内容:%s\n",size1,buf);
    36	
    37	    }
    38	    lseek(fd,0,SEEK_SET);
    (gdb) 
    39	    size2 = read(fd,buf_r,12);
    40	    if (size2 <0)
    41	    {
    42	        printf("read  erro\n");
    43	    }
    44	    else
    45	    {
    46	        printf("读取长度:%d\n 文本内容是:%s\n",size2,buf_r);
    47	    }
    48	    close(fd);    
    (gdb) 
    49	
    50	
    51	}
    (gdb) 
    Line number 52 out of range; write.c has 51 lines.
    (gdb) 
    

    3、运行程序

    run(简写 r) :运行程序直到遇到 结束或者遇到断点等待下一个命令;
    测试如下:

    (gdb) r
    The program being debugged has been started already.
    Start it from the beginning? (y or n) y
    Starting program: /home/eit/c_test/test 
    open file:hello.txt 3
    写入的长度:22
    写入文本内容:helo!I'm liujiangyong 
    读取长度:12
     文本内容是:helo!I'm liu
    [Inferior 1 (process 19987) exited normally]
    (gdb) 
    

    4、设置断点

    break(简写 b) :格式 b 行号,在某行设置断点;
    info breakpoints :显示断点信息
    Num: 断点编号
    Disp:断点执行一次之后是否有效 kep:有效 dis:无效
    Enb: 当前断点是否有效 y:有效 n:无效
    Address:内存地址
    What:位置

    (gdb) b 5
    Breakpoint 3 at 0x400836: file write.c, line 5.
    (gdb) b 26 
    Breakpoint 4 at 0x4008a6: file write.c, line 26.
    (gdb) b 30
    Breakpoint 5 at 0x4008c6: file write.c, line 30.
    (gdb) info breakpoints 
    Num     Type           Disp Enb Address            What
    3       breakpoint     keep y   0x0000000000400836 in main at write.c:5
    4       breakpoint     keep y   0x00000000004008a6 in main at write.c:26
    5       breakpoint     keep y   0x00000000004008c6 in main at write.c:30
    (gdb) 
    

    5、单步执行

    使用 continue、step、next命令
    测试如下:

    (gdb) r
    Starting program: /home/eit/c_test/test 
    
    Breakpoint 3, main () at write.c:12
    12	{
    (gdb) n
    14	    char *buf = "helo!I'm liujiangyong ";
    (gdb) 
    16	    len = strlen(buf);
    (gdb) 
    17	    fd = open("/home/hello.txt",O_CREAT | O_TRUNC | O_RDWR,0666);
    (gdb) s
    open64 () at ../sysdeps/unix/syscall-template.S:81
    81	../sysdeps/unix/syscall-template.S: No such file or directory.
    (gdb) 
    main () at write.c:18
    18	    if (fd<0)
    (gdb) 
    25	        printf("open file:hello.txt %d\n",fd);
    (gdb) 
    __printf (format=0x400a26 "open file:hello.txt %d\n") at printf.c:28
    28	printf.c: No such file or directory.
    (gdb) c
    Continuing.
    open file:hello.txt 3
    
    Breakpoint 4, main () at write.c:27
    27	    size1 = write(fd,buf,len);
    (gdb) 
    Continuing.
    写入的长度:22
    写入文本内容:helo!I'm liujiangyong 
    读取长度:12
     文本内容是:helo!I'm liu
    [Inferior 1 (process 20737) exited normally]
    (gdb) 
    

    6、查看变量

    使用print、whatis命令
    测试如下:

    main () at write.c:28
    28	    if (fd<0)
    (gdb) 
    35	        printf("写入的长度:%d\n写入文本内容:%s\n",size1,buf);
    (gdb) print fd
    $10 = 3
    (gdb) whatis fd
    type = int
    (gdb) 
    
    

    7、退出gdb

    用quit命令退出gdb:

    (gdb) r
    Starting program: /home/eit/c_test/test 
    open file:hello.txt 3
    写入的长度:22
    写入文本内容:helo!I'm liujiangyong 
    读取长度:12
     文本内容是:helo!I'm liu
    [Inferior 1 (process 20815) exited normally]
    (gdb) q
    root@ubuntu:/home/eit/c_test# 
    
    

    continue(简写 c): 继续执行程序,直到下一个断点或者结束;
    next(简写 n ):单步执行程序,但是遇到函数时会直接跳过函数,不进入函数;
    step(简写 s) :单步执行程序,但是遇到函数会进入函数;
    until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体;
    until+行号: 运行至某行,不仅仅用来跳出循环;
    finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息;
    call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55);
    quit:简记为 q ,退出gdb;

    三、gdb基本使用命令

    1、运行命令

    run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
    continue (简写c ):继续执行,到下一个断点处(或运行结束)
    next:(简写 n),单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
    step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的
    until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
    until+行号: 运行至某行,不仅仅用来跳出循环
    finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
    call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)
    quit:简记为 q ,退出gdb

    2、设置断点

    break n (简写b n):在第n行处设置断点
    (可以带上代码路径和代码名称: b OAGUPDATE.cpp:578)
    b fn1 if a>b:条件断点设置
    break func(break缩写为b):在函数func()的入口处设置断点,如:break cb_button
    delete 断点号n:删除第n个断点
    disable 断点号n:暂停第n个断点
    enable 断点号n:开启第n个断点
    clear 行号n:清除第n行的断点
    info b (info breakpoints) :显示当前程序的断点设置情况
    delete breakpoints:清除所有断点:

    3、查看源码

    list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
    list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
    list 函数名:将显示“函数名”所在函数的源代码,如:list main
    list :不带参数,将接着上一次 list 命令的,输出下边的内容。

    4、打印表达式

    print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
    print a:将显示整数 a 的值
    print ++a:将把 a 中的值加1,并显示出来
    print name:将显示字符串 name 的值
    print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
    print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
    display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
    watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
    whatis :查询变量或函数
    info function: 查询函数
    扩展info locals: 显示当前堆栈页的所有变量

    5、查看运行信息

    where/bt :当前运行的堆栈列表;
    bt backtrace 显示当前调用堆栈
    up/down 改变堆栈显示的深度
    set args 参数:指定运行时的参数
    show args:查看设置好的参数
    info program: 来查看程序的是否在运行,进程号,被暂停的原因。

    6、分割窗口

    layout:用于分割窗口,可以一边查看代码,一边测试:
    layout src:显示源代码窗口
    layout asm:显示反汇编窗口
    layout regs:显示源代码/反汇编和CPU寄存器窗口
    layout split:显示源代码和反汇编窗口
    Ctrl + L:刷新窗口

    7、cgdb强大工具

    cgdb主要功能是在调试时进行代码的同步显示,这无疑增加了调试的方便性,提高了调试效率。界面类似vi,符合unix/linux下开发人员习惯;如果熟悉gdb和vi,几乎可以立即使用cgdb。

    8、常用gdb调试命令汇总

    在这里插入图片描述

    四、总结

    总的来说在Linux下开发程序gdb/cgdb是必须学会使用的,他的强大之处远不止于此,在程序的调试中用它会提高的我们的调试效率,当然gdb的功能与使用技巧还不止于此,多多探索,多多学习使用。

    参考链接:https://blog.csdn.net/horotororensu/article/details/82256832

    展开全文
  • gdb.zip gdb源码

    2021-07-07 11:30:21
    gdb 源码
  • gdb手册debuging with gdb 中文版本的
  • GDB调试入门

    万次阅读 2017-12-01 17:47:09
    gdb -q:不显示开始的提示信息可以在.bashrc中加入alias gdb="gdb -q -tui"开始调试执行run(需要提前设置断点),也可以在调试过程中重新运行调试的程序,run后可以跟随发给该程序的任何参数。常用命令 命令 功能...

    启动gdb

    gdb -tui:分屏显示源代码
    gdb -q:不显示开始的提示信息

    可以在.bashrc中加入

    alias gdb="gdb -q -tui"
    

    开始调试

    执行run(需要提前设置断点),也可以在调试过程中重新运行调试的程序,run后可以跟随发给该程序的任何参数。

    常用命令

    命令功能
    list(简写l)显示当前行前面和后面的10行代码
    list n1 n2显示n1到行和n2行之间的代码
    list main显示main函数代码
    info functions regex列出符合正则表达式的函数名称
    info breakpoints(简写info b)查看当前所有的断点信息(断点号,断点类型,断点位置)
    break func在当前文件的func函数处设置断点
    break fileName:N在某文件的第N行处设置断点,当前文件第N行设置断点可以忽略fileName
    break func(或fileName:N) if exp条件断点,exp成立则断点
    delete N删除第N号断点
    delete删除所有断点
    clear N清除第N行上的断点
    watch expexp成立程序停住
    next(简写n)单步执行,遇到函数会跳过
    next N执行N次单步执行
    step(简写s)单步执行,遇到函数会进入
    finish执行完当前函数,返回到调用它的位置
    continue运行到下一个断点处
    until(简写u)鼠标放到代码行,运行到该代码行停止
    jump N跳转到第N行开始执行,不会主动在N行停住
    run重新运行调试的程序,可以带参数
    [Enter]直接回车执行上次执行的命令
    print var(简写p)查看变量var的值
    print /x var按16进制格式显示变量值
    ptype var查看变量var的结构或类型
    backtrach查看调用堆栈

    多进程调试

    默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试。换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。

    follow-fork-modedetach-on-fork说明
    parenton只调试主进程(GDB默认)
    childon只调试子进程
    parentoff同时调试两个进程,gdb跟主进程,子进程block在fork位置
    childoff同时调试两个进程,gdb跟子进程,主进程block在fork位置

    设置方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]

    查询正在调试的进程:info inferiors
    切换调试的进程: inferior
    添加新的调试进程: add-inferior [-copies n] [-exec executable] ,可以用file executable来分配给inferior可执行文件。
    其他:remove-inferiors infno, detach inferior

    展开全文
  • gdb manual

    2018-09-10 16:42:30
    gnu gdb manual page Debugging with gdb Tenth Edition, for gdb version 8.2.50.20180910-git gdb手册
  • GDB中文手册,有助于学习使用GDB调试
  • GDB调试GDB调试

    2010-08-04 09:55:52
    GDB调试GDB调试GDB调试GDB调试GDB调试 GDB调试GDB调试GDB调试GDB调试GDB调试
  • GDB完全中文手册
  • gdb 使用方法gdb 使用方法gdb 使用方法gdb 使用方法gdb 使用方法gdb 使用方法gdb 使用方法
  • 最新gdb8.1和gdb7.7

    2018-10-28 19:30:41
    下载完该软件包,解压后可以看到gdb-7.7.1.tar.bz2和gdb-8.1.tar.xz两个压缩包,解压后可以复制到MinGw所在的文件夹下即可。
  • gdb 手册,介绍linux 调试工具 gdb的使用方法。包括如下内容: GDB命令介绍.....
  • gdb64.exe和gdb.exe

    2020-03-21 02:21:40
    找了很久才找到 , 压缩包中分别有gdb64.exe和gdb.exe, 2积分不多。 找了很久才找到 , 压缩包中分别有gdb64.exe和gdb.exe, 2积分不多。
  • kakoune-gdb 用于gdb集成的插件。 设置 将gdb.kak和gdb-output-hanlder.perl添加到您的自动加载目录中: ~/.config/kak/autoload/ ,或手动获取它。 这两个文件必须位于同一目录中,脚本才能工作。 您至少需要...
  • GDB官方手册中文版详细介绍GDB调试的所有指令,全面学习GDB优秀官方文档,中文版学习方便有需要的可以下载,分享学习共同进步
  • gdb调试的基本使用

    万次阅读 多人点赞 2018-04-27 00:19:27
    GDB调试 启动程序准备调试 GDB yourpram 或者 先输入GDB 然后输入 file yourpram 然后使用run或者r命令开始程序的执行,也可以使用 run parameter将参数传递给该程序 参数列表 命令 ...
  • GDB中文手册 GDB

    2011-08-26 12:32:49
    GDB中文手册 介绍GDB的基本调试方法
  • gdb.exe,gdb64.exe

    2019-03-11 15:20:42
    资源不好找,codeblocks调试需要gdb的下载这个正好,gdb下载。压缩包里有两个分别是gdb.exe和gdb64.exe
  • GDB官网用户手册
  • GDB中文手册完美版_Linux,Unix编程_GDB中文_gdb.zip
  • Debugging with gdb

    2021-06-18 13:00:28
    Debugging with gdbgdb官方文档2021年最新版
  • GDB入门:A GDB Tutorial with Examples

    万次阅读 2021-02-15 21:39:14
    GDB 安装 yum install gdb 使用 查看 gdb 命令使用方法 man gdb A GDB Tutorial with Examples By Manasij Mukherjee A good debugger is one of the most important tools in a programmer’s toolkit. On a ...
  • binutils-gdbgdb和binutils

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,529
精华内容 53,811
关键字:

gdb