美文网首页
Linux调试-GDB

Linux调试-GDB

作者: 執著我們的執著 | 来源:发表于2018-08-09 00:08 被阅读0次
    启动GDB调试

    在使用GDB之前,编译出带调试信息的程序,调试信息中包含了函数和变量所在文件和行号信息,通过gcc编译出debug版本 -g:
    gcc -g test.c -o test

    调试方式1 : 运行GDB程序并加载程序执行

    (1) 可以用 gdb test 的方式,test为可执行程序名
    [root ] # gdb test
    (2) 也可以先启动 gdb , 然后用 file <文件名> 命令加载可执行文件
    <root> gdb
    (gdb) file test

    调试方式2 : 对正在运行的程序进行调试

    [root ]# ps -a 查看待调试程序的进程ID号
    [root ]# gdb att pid

    调试常用命令
    • 1、 b : 下断点

    • 2、 X : 查看内存
      X/nfu Address
      注:
      n:显示多少个单元
      fo(octal 8进制),x(hex 16进制),d(decimal 10进制)
      u:指定要打印的内容的长度; b(Byte 1个字节),w(word 4个字节)
      例如:
      X/8xb szArry : 显示数组内容

    • 3、 p:查看
      (1) p a
      (2) 修改 :p a=12345
      (3) 查看堆栈地址内容 : p *((int *)(0x7ffffffr4ac))
      (4) 函数调用 : p Print_Hello

    • 4、 thread:线程
      (1) 查看 : info threads
      (2) 切换线程 : thread XXX
      (3) thread num 显示线程情况,num为线程号

    • 5、 r:run的简写,运行被调试的程序

    • 6、 bt : backtrace的简写,查看堆栈(调用栈)的信息

    • 7、 watch
      watch <expr>:为表达式(变量)expr设置一个观察点;变量或表达式值有变化时,马上停住程序。

      • 表达式可以是一个变量
        例如:watch value_a
      • 表达式可以是一个地址:
        例如:watch *(int *)0x12345678 可以检测4个字节的内存是否变化。
      • 表达式可以是一个复杂的语句表达式:
        例如:watch a*b + c/d

      info watchpoints: 列出当前设置的所有观察点

    core文件

    gdb /xxx/xxx xxx.core
    bt
    通过上面的命令调试.core文件,可以看出是哪个函数中出错



    1. gdb的调用堆栈详解: bt

    调用堆栈是当前函数之前的所有调用函数的列表(包括当前函数),每个函数及其变量都被分配了个栈帧,最近调用的函数(也就是当前函数)在0号栈帧中(栈底帧),外层的调用函数的栈帧号依次+1
    gdb通过命令bt(backtrace回溯)来打印堆栈

    (gdb) bt
    #0
    #1
    #2
    
    2. 命令 frame args

    参数args表示编号numAddress,将当前栈帧设置为args指定的栈帧,并打印该栈帧的简要信息
    例如:

    #切换到1号栈帧,并打印1号帧的内容
    (gdb) frame 1
    (gdb) info locals
    
    3. 命令up/down

    在当前栈帧向上回退/向下前进(更外层/更内层,即远离0号/靠近0号)n个栈帧,n默认为1

    4. 打印栈帧信息
    4.1 命令 frame

    打印当前栈帧的简要信息

    4.2 命令 info frame

    打印当前栈帧的详细信息

    4.3 命令 info frame args

    打印指定栈帧的详细信息

    4.4 命令 info args

    打印当前栈帧函数参数信息

    4.5 命令 info locals

    打印当前帧中的局部变量的信息,缺省情况下当前帧就是被中断的函数,也就是0号栈帧的函数

    相关文章

      网友评论

          本文标题:Linux调试-GDB

          本文链接:https://www.haomeiwen.com/subject/cdjdvftx.html