zoukankan      html  css  js  c++  java
  • gdb调试工具

    使用gdb工具,必须在编译时加上 -g选项

    gcc -g main.c -o main

    $ gdb a.out
    
    

    基础指令

    列出源码

    (gdb) l 1
    1       #include <stdio.h>
    2       #include <stdlib.h>
    3       #include <time.h>
    4
    5       void fun()
    6       {
    7               printf("---------");
    8       }
    9
    10      int main()
    # 打断点
    (gdb) b 12
    Breakpoint 1 at 0x4005d6: file gdbtest.c, line 12.
    # run
    (gdb) r
    Starting program: /home/fight/demo/code/gdb/aa 
    
    Breakpoint 1, main () at gdbtest.c:12
    12              srand(time(NULL));
    Missing separate debuginfos, use: debuginfo-install glibc-2.17-292.el7.x86_64
    # 下一步,执行下一行,系统函数只能用n
    (gdb) s
    # 下一步,进入函数内部
    (gdb) n
    # until 19
    (gdb) until 17
    # 打印变量
    (gdb) p age
    
    # 继续
    (gdb) continue
    

    直接run,可以找出段错误的位置。

    • list 1 打印代码 【或者 l 1】
    • r run 【参数列表】
    • s step
    • n next
    • until
    • p var 【查看变量】
    • ptype var 【查看变量类型】
    • continue
    • b N 【在第N行打断点】
    # 
    b 12
    # 条件断点
    b 12 if i=5
    
    • delete N
    • finish 【 结束当前函数调用,返回调用点】
    • set args 【入口函数参数】
    • info
    # 查看断点信息
    info b
    
    • backtrace | bt【查看函数的调用栈帧,和层级关系】
    (gdb) bt
    #0  fun () at gdbtest.c:7
    #1  0x0000000000400610 in main () at gdbtest.c:15
    
    • frame | f【切换函数的栈帧】
    # 从#0栈帧切换到#1栈帧
    (gdb) frame 1
    #1  0x0000000000400610 in main () at gdbtest.c:15
    15              fun();
    # 查看栈帧#1 的变量
    (gdb) p age
    $1 = 100
    

    站帧:随着函数调用而在stack上开辟的一片内存空间。用于存放函数调用时产生的局部变量和临时值。

    • display var 【跟踪变量】
    (gdb) display age
    1: age = 100
    (gdb) n
    age is : 100
    15              fun();
    1: age = 100
    
    • undisplay var 【取消跟踪】
    (gdb) undisplay 1 # 跟踪的变量编号
    
    • enable breakpoints
    • disable breakpoints
    • watch 【被设置观察点的变量发生变化是,显示打印】
    • i watch 【显示观察点】
  • 相关阅读:
    观察者模式
    字符串操作函数
    位域结构体的字节对齐
    备忘任务
    Linux编程下EAGAIN和EINTR宏的含义及处理
    Linux 中write()函数的出错情况及处理
    Nginx配置配置文件nginx.conf的设置
    Linux编程获取本地IP
    redis与memcached比较
    TCP通讯socket自定义协议的实现
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/12287407.html
Copyright © 2011-2022 走看看