GDB调试

Posted 朱果果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB调试相关的知识,希望对你有一定的参考价值。

  • GDB介绍
  • 使用GDB
  • 调试命令

GDB介绍

  GUN Procject debugger

  支持 汇编、C、C++、GO等语言

  使用printf调试代码,及其低效耗时,尤其对于工程代码。GDB调试是Linux平台上最为强大的调试工具。

使用GDB

  对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试,会出现 no debugging symbols found的信息。

  Reading symbols from helloWorld...done.表明可调试。


GDB启动调试未运行的程序
  1)调试启动无参程序  

$ gdb hello
..................
(gdb)run

  直接输入run

  2)调试带参程序

  run + 参数

#include<stdio.h>
int main(int argc,char *argv[])
{
    if(1 >= argc)
    {
        printf("usage:hello name\\n");
        return 0;
    }
    printf("Hello World %s!\\n",argv[1]);
    return 0 ;
}

  编译:

gcc -g -o hello hello.c

  启动调试并设置参数

 

   3)调试core文件

   当程序core dump时,可能会产生core文件,调试core文件能很快定位问题

 $ gdb  程序文件名  core文件名

 

GDB启动调试运行的程序

 先找到进程ID    

$ ps -ef|grep 进程名   或者    $ pidof 进程名

  调试

gdb  -p  进程ID    或者  attach 进程ID

单步启动运行 start命令

 gdb -tui  文件名   图形界面调试

 

设置断点

为何要设置断点?

设置断点后,程序运行到断点位置就会暂停,就可以对程序进行更多的操作,比如查看变量内容,堆栈情况等等,以助调试程序

设置程序断点

  b  行号

  b  文件名:行号

  b  函数名

查看已设置的断点

  info break

删除断点

  delete 1

禁用或启动断点

有些断点暂时不想使用,但又不想删除,可以暂时禁用或启用。例如:

disable  #禁用所有断点
disable bnum #禁用标号为bnum的断点
enable  #启用所有断点
enable bnum #启用标号为bnum的断点
enable delete bnum  #启动标号为bnum的断点,并且在此之后删除该断点

GDB调试--华清直播 

https://www.makeru.com.cn/live/4034_2111.html

GDB调试入门指南

 https://zhuanlan.zhihu.com/p/74897601

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于GDB调试的主要内容,如果未能解决你的问题,请参考以下文章

代码调试篇:gdb调试快速入门指南

GDB代码调试与使用

GDB调试

使用GNU/gdb调试Linux C/C++可执行程序查看出错源代码、设置断点

代码调试工具GDB

代码调试篇:如何编写 gdb 自定义命令