zoukankan      html  css  js  c++  java
  • linux下gdb常用的调试命令 .

    摘自:http://blog.csdn.net/schoolers/article/details/6743223

    本文的一些技巧很不错,故转载之。

    用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法。
    呵呵,有时迷茫了自己处在什么堆栈的深处,这是使用where命令能够清晰的看到自己的位置,有时在循环太多让人受不了了,可使用u或者finish或者jump命令来跳出去。
    gdb常用:
    run  启动程序运行
    next 单步执行(不到函数内部)
    step  单步执行,跟踪到函数内部
    finish 继续执行,直到当前函数结束
    continue 继续执行,直到下一个断点
    jump 9 直接跳到指定行

    list  显示源码
    l 3,10 显示特定范围的源码 l main显示函数的源码
    set listsize 50 修改源码显示行数

    break 设置断点
    b main设置函数断点
    b 9 设置指定行断点
    b 将下一行设置为断点
    b test if a == 10 设置条件断点

    delete 删除断点
    d 3 删除指定的断点

    condition 修改条件 condition 4 a == 90

    info 查看信息
    info threads 查看线程信息
    info breakpoints 查看断点信息
    info locals 显示局部变量
    info args    显示函数变量
    info registers 显示寄存器数据

    thread 2 切换线程

    where 查看调用堆栈(bt 或者 info s)
    frame 查看当前堆栈帧
    frame 8 查看指定堆栈帧信息
    info frame 查看当前堆栈帧更详细的信息

    print a 打印变量信息
    print/x a 十六进制输出变量信息
    print a + b 可以进行表达式计算
    print $eax 显示某个寄存器的数据

    x/nfu 0×300098  显示指定地址的内存数据
    n 显示内存单位,长度
    f 格式(除了 print 格式外,还有 字符串s 和 汇编 i)
    u 内存单位(b: 1字节; h: 2字节; w: 4字节; g: 8字节)

    set vairiable a = 100 可以修改变量的值

    commands 指定到了特定断点后执行的命令序列

    whatis buf  显示变量的类型
    dump memory 输出文件名 内存起始地址  内存终止地址
    restore  文件名 binary  起始位置
    watch buf buf的值一旦改变,会触发watchpoint

    奇淫技巧:
    cat ~/.gbinit  gdb会从这个文件读取配置
    cat ~/.gdb_history

    呵呵,对于gdb时想要查看长的字符串老是显示不全,怎么半呢,gdb参看数组字符串时默认只是显示部分的数据,通过这个命令可以修改:

    set print elements 0   默认这里设置是200,设置为0表示没有限制

    还有其它一些set命令可以试试:

    set print address
    set print address on
    打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的

    set print object <on/off>
    在C++中,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用的规则显示输出,如果关闭这个选项的话,GDB就不管虚函数表了。这个选项默认是off

    show print pretty
    查看GDB是如何显示结构体的

    set print array
    set print array on
    打开数组显示,打开后当数组显示时,每个元素占一行,如果不打开的话,每个元素则以逗号分隔。这个选项默认是关闭的

    set print null-stop <on/off>
    如果打开了这个选项,那么当显示字符串时,遇到结束符则停止显示。这个选项默认为off

    set print pretty on
    如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮

    set print union <on/off>
    设置显示结构体时,是否显式其内的联合体数据。例如有以下数据结构

    p string+n显示偏移n后的字符串内容,这个使用起来也是比较方便的




  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007595.html
Copyright © 2011-2022 走看看