精华内容
下载资源
问答
  • 如何使用GDB调试

    2020-10-22 20:51:55
    文章目录一、GDB的介绍二、GDB的使用三、使用GDB调试实际例子 一、GDB的介绍 GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、...启动GDB 启动方法: gdb [程序名称

    一、GDB的介绍

    GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。

    二、GDB的使用

    1. GDB的使用条件
      程序要用GDB调试,需要添加调试信息。
      添加方法:

      gcc的-g选项为程序添加调试信息。
      例如:gcc –g –o helloworld helloworld.c

    2. 启动GDB
      启动方法:
      gdb [程序名称]

    3. GDB常用命令
      ①GDB命令的介绍

    命令名 命令功能
    file 装入想要调试的可执行文件
    kill 终止正在进行的调试程序
    list 列出产生执行文件的源代码的一部分
    next 执行一行源代码但不进入函数内部
    step 执行一行源代码并可以进入函数内部
    run 执行当前被调试的程序
    c 继续运行程序
    quit 终止gdb
    watch 使你能监视一个变量的值而不管它何时被改变
    backtrack 栈跟踪,查看代码被谁调用
    print 查看变量的值
    make 不用退出gdb,就可以重新生成可执行文件
    shell 不用退出gdb,就可以使用UNIX shell命令
    whatis 显示变量或者函数类型
    break 设置断点
    info break 显示当前断点信息,包含到达断点处的次数
    info files 显示被调试文件的详细信息
    info func 显示所有函数名称
    info local 显示当前的函数的局部变量
    info prog 显示被调试程序的执行状态
    delete [n] 删除第n个断点
    disable [n] 关闭第n个断点
    enable [n] 开启第n个断点
    ptype 显示结构定义
    set variable 设置变量的值
    call name(args) 调用并执行为name,参数为args的函数
    Finish 终止当前函数并输出返回值
    return value 停止当前函数并返回value给调用者

    ②GDB部分命令的使用方法
    break
    依据行号设置断点:break linenum
    依据函数名设置断点:break funcname
    依据某个源文件的某行设置断点:break filename:linenum
    依据某个源文件的某函数名设置断点:break filename:funcname

    三、使用GDB调试实际例子

    实例1代码(实现整形数据反转):

    #include <stdio.h>
    void ShowRevertNum(int iNum)
    {
     while (iNum > 10)
     {
    printf("%d", iNum % 10);
     iNum = iNum / 10;
     }
     printf("%d\n", iNum);
    }
    int main(void)
    {
     int iNum;
     printf("Please input a number :");
     scanf("%d", &iNum);
     printf("After revert : ");
     ShowRevertNum(iNum);
    }
    

    程序编译:
    在这里插入图片描述
    程序调试过程:
    在这里插入图片描述
    在这里插入图片描述
    实例2代码:

    #include<stdio.h>
    #include<string.h>
    
    #define BUFSIZE 256;
    
    
    static char *pStr;
    static char acBuf[BUFSIZE];
    int main(void)
    {
    	printf("Please input a string:");
    	gets(pStr);
    	printf("\nYour string is:%s\n",pStr);
    }
    

    编译执行:
    在这里插入图片描述
    当遇到段错误时,使用core来快速定位问题。
    方法:
    ①产生core文件
    ulimit -c num(num为数字,0表示不产生core文件)
    ②运行程序,让程序崩溃,产生core文件
    ③gdb配合core文件,定位
    gdb 程序名 core文件名
    通过上述方法,就可以定位到问题出现的地方。
    实例3代码:

    #include<stdio.h>
    int main()
    {
    	int *p=0;
    	*p=1;
    	return 0;
    }
    

    在这里插入图片描述
    笔者在使用core文件来进行定位遇到问题,暂时还没有解决。后续,解决后会继续分享出来的。
    小结
    对于GDB的使用就展示分享到这里。在描述的地方可能不是很准确,请大家多加包含。

    展开全文
  • Linux启动gdb调试模式二——断点调试 最近学习如何在linux启动gdb断点调试,现在继续学学习中。 上篇文章讲述怎么通过gdb模式来打印异常,只有当程序异常崩溃是,core文件才能产生,当很多时候,我们同步的...

    Linux启动gdb调试模式二——断点调试


    最近学习如何在linux启动gdb断点调试,现在继续学学习中。

    上篇文章讲述怎么通过gdb模式来打印异常,只有当程序异常崩溃是,core文件才能产生,当很多时候,我们同步的看到调试信息,就像windows断点一样F9,F10/F11继续等等。那么linux如何启动呢?

    其实,也是很简单的,具体步骤:

    1. gdb *** (***代表要执行程序)

    2. b *.cpp:linexxx (*.cpp代表程序,linexxx 代表该程序哪一行断点)

    3. -r  --parameters,启动程序 (运行参数,比如运行ICE文件的: --Ice.Config=***)

    4. n+Enter(n代表运行下一行,类似F10功能,Enter是确定)


    以上就是一简单的gdb断点调试


    展开全文
  • 如何使用GDB调试

    2020-05-09 20:43:39
    GDB调试器 gcc选项 gcc [选项]文件 源文件(.c文件) -E:预处理(.i文件) -S:编译到汇编语言(.s文件) -c:编译到目标代码(.o文件) ...3.gdb gdb_sample(启动GDB开始调试) 4.(gdb) 到gdb开头的命令行

    GDB调试器

    gcc选项
    gcc [选项]文件
    源文件(.c文件)
    -E:预处理(.i文件)
    -S:编译到汇编语言(.s文件)
    -c:编译到目标代码(.o文件)
    -o:文件输出到文件(无后缀文件)

    GDB调试器使用流程
    1.vi gdb_sample.c(编写代码)
    2.gcc -g gdb_sample.c -o gdb_sample(一定加-g编译出的可执行代码中才包含调试信息,否则GDB无法加载该可执行文件)
    3.gdb gdb_sample(启动GDB开始调试)
    4.(gdb) 到gdb开头的命令行
    gdb下可执行的命令:
    调试运行环境相关命令:
    list:列出代码
    break:设置断点
    在这里插入图片描述
    info breakpoints [n]:查看断点
    run:运行代码
    在断点处查看变量值:p 变量名称
    continue:恢复程序运行
    step或next:单步运行
    watch 变量名:观察变量的变化情况
    quit:退出(q)
    call 函数名:在当前位置执行所要运行的函数。
    return <返回值>改变程序流程,直接结束当前函数返回指定值。
    堆栈相关命令:
    backtrace,bt:用来打印栈帧指针,也可以在该命令后加上要打印的栈帧指针的个数。
    frame:该命令用于打印栈帧。
    info reg:查看寄存器使用情况。
    info stack:查看堆栈情况。
    up:跳到上一层函数。
    down:跳到下一层函数。

    展开全文
  • 如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 2、调试C/C++程序 直接上代码了 #include<iostrea
  • Linux启动gdb调试模式

    千次阅读 2014-11-29 11:59:53
    由于使用linux编译程序不多,所以不太清楚如何使用debug模式,再请教主程时,得到了一些方法启用debug模式,发现GDB功能的强大,足矣调试出你的程序崩溃原因。 由于linux环境的差异性,很多情况都千差万


    最近,在linux运行程序时,发现程序服务总是莫名其妙的终止,也无任何异常提示信息。觉得很奇怪,后来发现是没有启动debug模式,是用release运行的,所以看不出异常信息。 由于使用linux编译程序不多,所以不太清楚如何使用debug模式,再请教主程时,得到了一些方法启用debug模式,发现GDB功能的强大,足矣调试出你的程序崩溃原因。


    由于linux环境的差异性,很多情况都千差万别的,要经过不多摸索与尝试才取得成功,同时又要善于总结,方能有效不断提高水平。


    系统环境: CentOS release 5.8 (Final)
    编译工具:gcc (GCC) 4.1.2 20080704


    启动Debug:
       1.  首先在配置 .bash_profile 文件,在其里面添加配置项: ulimit -S -c unlimited > /dev/null 2>&1
       2. 在编译目录下 configure 文件,执行这个文件并带debug参数: ./configure --enable-debug yes  。如果不记得这个命令可以使用帮助命令:./configure --help
       3. 然后就可以使用gcc编译即可。(或则配置好的makefile文件后,直接make编译,make install 安装)
       4. 生成执行程序后并运行它,如果程序出现异常崩溃,就会产生一个 core.* 文件,此时利用命令: gdb binexec core.* ( gdb + 运行程序 + 生成的core.* 文件),就可以看到异常崩溃的断点了,而且比较详细。
       5. 如果想看堆栈信息,则使用 输入 “bt” 命令可以看出堆栈信息。

    以上就是启动GDB的调试模式。


    如果想生成release模式呢?
    1. make clean
    2. make -j3
    (这种模式是你配置好makefile文件,然后make编译就行了)


    文章可能不足,还请大神多多指教,同时希望对大家有用,大家相互学习与共享,共同进步^_^




    展开全文
  • xv6实验的gdb调试启动方式有一点不一样 首先需要在Makefile文件中加入 gdb: riscv64-unknown-elf-gdb kernel/kernel 在终端中输入make qemu-gdb,然后卡住到一个界面,记住tcp号为25000 打开另一个终端2,切换到...
  • 要使得 C 和 C++ 程序能在 GDB 下正常进行调试,必须在程序编译期间把基本的调试信息(如变量名、函数名、函数调用堆栈等)添加到可执行文件中。gcc、cc、g++ 等编译器可通过编译参数 -g 调试信息。 ...
  • Linux下如何使用gdb启动调试

    千次阅读 2020-03-12 20:46:51
    GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具,本篇以C语言来调试GDB简介 UNIX及UNIX-like下的调试...
  • 之前学习安装工具时,简单的学习使用了gdb调试器,但是还是很不熟悉,这次学习了如何gdb调试多进程做一总结,并且复习一下之前的gdb调试。gdbgdb的功能? 主要功能 1、启动程序,可以按照你的自定义的要求...
  • 如何使用gdb调试程序

    千次阅读 2012-11-23 14:23:05
    1.把调试信息加到可执行文件中,使用编译器的-g参数. 如 : gcc -g hello.c -o hello ...3.进入gdb调试环境后,可使用相关gdb命令开始调试程序(gdb的命令可以用help来查看) gdb的调试命令很多 可以使用 help 来查看一
  • 首先我们写好一个.c 文件,用于做实验; 我们通常写完这个程序,会使用命令gcc test.c -o test,对源文件...编译完成后,启动GDB调试工具,命名为:gdb + 要调试程序的程序名,在本例中使用的命令为【gdb test
  • linux下gdb调试core文件如何设置启动参数? 只知道gdb program corefile
  • GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 225
精华内容 90
关键字:

如何启动gdb调试