zoukankan      html  css  js  c++  java
  • linux gdb基本概念

    GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统。一般来说,GDB主要可以帮助我们完成以下四个方面的功能:  1, 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2,可以让被调试的程序在你所指定的断点处停住。  3, 当程序被停住时,可以检查此时你的程序中所发生的事情。 4, 动态的改变你程序的执行环境。  与图形化的调试工具相比,GDB具有如下优点: GDB的启动速度比GUI快很多,当只需要快速检查代码中的某项内容时,这就是一 个很重要的优点。在与Eclipse比较时,这种启动时间上的差距很大。 

    下面我在自己虚拟机上的一个进程拷贝的代码进行的实验

    gcc main.c -g -o app

    gdb app

    之后我们就可以使用gdb进行调试了

     

    run全速执行,start开始执行,这两个命令如果有命令行参数的话最好加上(建议)

     

     启动界面

    start直接执行到了67行

     

    list:可以查看代码

    list+num可以指明查看哪一行代码

    听过break可以打断点,info breakpoints可以查看我们用了哪些断点,delete breakpoints可以取消断点,这里我们需要注意一个问题就是,在virtual studio中的断点,如果关闭了下次打开仍然存在,但是这里如果关闭了下次就不会存在了

     

    相对应的,vs中有监禁的功能,就是监视变量,display就有这个功能,info display可以查看我们监视了哪些变量,之后我们每次next和step的时候,都会在最后几行显示监视的变量,delete就是删除了

     

    step就是按语句调式,next就是按照过程调式

    set var 变量名=值  可以中途改变变量的值,

     

    printf可以中间输出变量的值

     

    backtrace( bt )显示程序的层次关闭,与函数调用栈帧,下面75行到26行跳到了另外一个函数,这样可以使用backtrace就可以看层次关系,两个函数使用不同的栈,所以我们使用print argc的时候不好使,我们可以通过frame临时跳到main中,

    在一盒函数中我们使用finish可以挑战到调用的开始位置

     

     x(x/20wx)可一查看内存,20表示查看20字节,w表示word,x表示十六进制

     

    continue  如果使用断点的话我们使用continue可以按照断电进行

     

    set follow-fork-mode (child or parent)  调用父进程子进程

     

    core启用core文件,帮助调试

    在编译运行app的时候,如果有问题,会生成一个core文件通过gdb core会直接发现错误,这种方法非常方便,但是core的文件特别大

    quit退出调试

  • 相关阅读:
    [bzoj1096][ZJOI2007]仓库建设
    [bzoj1010][HNOI2008]玩具装箱
    [bzoj2301][HAOI2011]Problem b
    [HDU1695]GCD
    [SDOI2006] 保安站岗
    [TJOI2007] 调整队形
    Luogu_1944 最长括号匹配
    [USACO07NOV] Milking Time
    [USACO13FEB] Tractor
    [模板] 一些要复习的模板
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6391873.html
Copyright © 2011-2022 走看看