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后的字符串内容,这个使用起来也是比较方便的




  • 相关阅读:
    线程池ThreadPoolExcecutor介绍
    java类初始化顺序
    CountDownLatch,CyclicBarrier,Semaphore的使用
    设计模式UML图
    windows10磁盘分区后,如何恢复分区,回到未分区之前
    神州战神U盘安装windows10系统,启动项制作好后,在bios中识别不到自己的u盘问题
    项目报错:Invalid bound statement (not found):
    在docker安装tomcat的时候,报错:Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true
    PowerDesigner逆向生成MYSQL数据库表结构总结
    mysql导出word的表结构操作
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007595.html
Copyright © 2011-2022 走看看