zoukankan      html  css  js  c++  java
  • gdb基础用法

    GDB是什么

    GNU symbolic debugger

    GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等

    GDB能做什么

    • ★★1.程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量
    • 2.可使被调试程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试。
    • ★★3.程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误【未使用过】

     

    基础用法

    1、查看调用栈 (backtrace,缩写bt)

    bt [-full][n]             // 打印frame信息,打印栈帧信息的同时,打印出局部变量的值
    thread apply all bt         // 查看所有线程的堆栈

    C/C++程序在执行时,每调用一个函数,都会生成一个栈帧(frame,缩写 f)

    1. frame集中存放在一块大的内存中,一般称之为栈区
    2. frame在函数调用时生成,在函数调用完成时销毁。

      栈帧frame

      ① main() 主函数对应的frame,又称为初始帧或者最外层的帧。(类似洋葱)

      ② 每当程序中多调用一个函数,执行过程中就会生成一个新的frame,如果该函数是一个递归函数,则会生成多个frame.

      ③ 每个frame对应有地址作为它们的标识符,每个frame都是一块连续的内存,但不一定是frame的首地址。

      ④ gdb调试器给frame进行编号,当前正在运行函数对应的frame记为frame 0,调用它的函数记为 frame 1,以此类推。

    f num        // 设置 frame num 为当前frame
    up [num]     // 设置当前帧+num为当前frame
    down [num]   // 设置当前帧-num为当先frame
     
    info frame   // 查看当前frame的信息
    info args    // 查看当前frame参数的值
    info locals  // 查看局部变量的值

    参考:http://c.biancheng.net/view/8282.html

    2、查看变量的值

    print,缩写p

    p result                      // 打印值 
    p result=10                   // 修改值
    print file::variable             // 指定作用域为文件file
    print func::variable             // 指定作用域为函数func
    print fmt expr                // fmt用于设置打印输出的格式,如十六进制、二进制等
    // 打印设置 set print array on/off      // 是否以便于阅读的格式输出数组中的元素,默认值为off. set print array-indexed on/off   // 打印数组变量的同时打印下标,默认off. set print pretty on/off      // 以便于阅读的格式打印某个结构体变量的值,默认值为off. set print address on/off      // 查看某一指针变量的值时,是否同时打印其占用的内存地址,默认值为on.
    set print repeats 0             打印的时候不重复
    set print elements 0       打印长度不限制
    set pagination off       打印不分页
     

    display

    display expr                  // 打印变量或表达式
    display /fmt expr              // fmt用于设置打印输出的格式,如十六进制、二进制等
    
    info display                     // 查看display信息
    undisplay linenum                // 删除自动显示
    enable/disable display linenum      // 启用/禁用自动显示
    delete display linenum // 删除自动显示

     3、带参数的调试

    // 法一
    gdb -args ./test_entity_fuzzy config.cfg txt1 song_20w_add_6_4.dic txt1_result 1
    
    
    // 法二
    gdb ./test_entity_fuzzy
    set args config.cfg txt1 song_20w_add_6_4.dic txt1_result 1
    b test_result

    4、layout 调试

    layout src

    在线文档:

    官方文档:ttps://sourceware.org/gdb/current/onlinedocs/gdb/index.html#SEC_Contents

    100个调试技巧:https://wizardforcel.gitbooks.io/100-gdb-tips/content/show-version.html

    个人学习笔记,网络内容搬运工,喜欢的点个赞,如有侵权请联系删除。
  • 相关阅读:
    第二章 搭建Android开发环境
    彻底修改 Windows 系统用户名
    第一章 Android系统移植与驱动开发概述
    返回一个整数数组中最大子数组的和。
    返回一个二维整数数组中最大子数组的和。
    返回一个整数数组中最大的子数组的和。
    四则运算
    关于南方Cass的使用感受
    数据结构-王道2017-第3章 栈和队列-栈和队列的应用
    数据结构-王道2017-第3章 栈和队列-队列
  • 原文地址:https://www.cnblogs.com/qing2105/p/14287069.html
Copyright © 2011-2022 走看看