zoukankan      html  css  js  c++  java
  • [ASM C/C++] GDB 常用命令

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。一般来说,GDB主要帮忙你完成下面四个方面的功能:
      1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
      2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
      3、当程序被停住时,可以检查此时你的程序中所发生的事。
      4、动态的改变你程序的执行环境。

      GDB是一个符号式命令调试器。所谓“符号式(Symbolic)”,意思是在执行程序的时候可以使用变量名和函数名,就好像它们是在源代码中名称一样。为了显示和翻译这些符号,调试器需要与它们相关的信息,以及哪条机器指令对应哪行源代码的信息。这类信息会以符号表的形式出现。当用GCC编译和链接程序时,使用-g选项就会产生符号表。
    $ gcc –g test.c

    1.    启动GDB
    $ Gdb [选项] [执行文件] [核心文件] [进程ID]

    2.    命令行自变量
    $ gdb myprog  //启动程序
    $ gdb myprog 1001 //启动进程

    3.    命令行选项
    --version , -v //输出版本和版权信息
    -- quiet, --silent //开始一个交互式的调试过程
    --help , -h //显示命令行语法

    4.    传递自变量被调试程序
    --args
    $ gdb –args myprog –d “$HOME” //myprog 是被调试程序,$HOME是myprog的命令行自变量,--args必须是GDB最后出现的选项。

    5.    选择文件
    -symbols filename
    -s filename //加载一个独立的符号表文件
    -exec flilename -e filename //指定要被调试的可执行文件
    -se filename //指定有符号表的可执行文件
    -core filename -c filename -c number -pid number -p number //指定调试内核或进程

    6.    先择用户界面
    -tty device
    -t device     //使用 device 做为被调试程序的输入输出
    -windows
    -w //使用内置的GUI
    -nowindows
    -nw //在控制台下执行
    -tui //使用文本式用户界面TUI


    7.    执行命令脚本
    -command command_file -x command_file //开始执行命令文件
    -batch //执行所有命令后结束,无错状态为0,不为0有错

    8.    命令补充
    GDB调试器可以帮你节省很多输入工作,可以补充命令名称、变量名称、文件名称、或函数名称。只要输入前几个字符,然后按Tab 链即可。

    9.    显示命令的帮助说明
    -help ,-h


    10.    状态信息
    被调试程序的状态信息
    Info
    Info address
    Info all
    Info args
    Info breakpoints

    调试器的状态信息
    Show annotats
    Show archdebu
    Show architecture
    Show args
    Show logging

    11.    在调试器中执行一个程序
    File filename
    Set args [arguments]
    Show args

    Run [arguments]
    Kill //调试过程发现错误可以用kill终止调试,然后编辑和重新编译程序,如果没有关闭调试器,再次运行时所以设置都会保留。

    12.    显示源代码
    List filename:line_number //显示源代码,以此行代码为中心
    List from ,[to] //显示from 到to的代码行
    List function_name //把指定函数的第一行代码当作中间行来显示源代码
    List //从上次list停止的地,继续显示

    Set listsize number //设置list命令默认的输出行数
    Show listsize //显示list命令默认的输出行数

    13.    使用断点
    设置和显示断点
    Break [filename:] line_number //在源代码或文件的某一行设定断点
    TBreak line_number //设置临时断点

    删除、禁用和忽略断点
    Delete [bp_number | range]
    D  [bp_number | range]

    Disable [bp_number | range] //临时禁用某个断点
    Enable [bp_number | range]
    Ignore bp_number iterations //忽略bp_number断点iterations次

    条件式中断
    Break [position] if expression

    中断后继续执行
    Continue [passes] 、c [passes] //继续执行到下一断点
    Step [lines] 、s [lines] //单行执行
    Next [lines]、n [lines] //单行执行,不进入子函数
    Finish //执行完当前函数,控制权交给调用者

    14.    分析堆栈
    显示调用轨迹
    backtrace(bt)  //显示调用轨迹

    显示和改变目前的堆栈帧
    Frame [编号]

    显示自变量和局部变量
    Info frame //显示目前堆栈帧的相关信息
    Info locals //列出函数的局部变量,以及当前值
    Info args //列出对应函数调用的自变量值

    15.    显示数据
    显示表达式的值 
    P [/format] [expression]
    输出格式
    D 十进制记数,这是整数表达式的默认格式
    U 十进制记数,无符号整数类型
    X 十六进制记数法
    O 八进制记数法
    T 二进制记数法
    C 字符,和十进制记数法的字符码一起显示

    显示内存区域
    X [/nfu] [address] //显示从指定地址开始的内存区域的内容
    /nfu
    N //十进制数,指定要显示多少个内存单位。
    F //格式修饰符,可以是print命令所支持的格式之一,或才是以下两个:
         s : 将指定的地址的数据当成“空字符结尾的字符串”显示出来。
        I:以汇编语言的形式显示机器指令

    U //定义所显示的每个内存单位的空间大小。
    b: 一个字节
    h: 两个字节(半个字)
    w:四个字节(一个字)
    g:八个字节(一个巨大字)

    16.    观测点:观察变量
    Watch expression //当表达式的值改变时调试器停止程序执行
    Rwatch expression // 当程序读取“和此表达式相关”的任何对象进,调试器停止程序执行
    Awatch expression //当程序读取或修改“和此表达式相关”的任何对象进,调试器停止程序执行

    17.    在GDB内分析核心文件
    核心文件(core file)也被称为core dump,是一个包含“进程所使用内存映像”的文件。当一个程序不正常地终止时,Unix系统通常会将核心文件写到工作目录下。通过命令行将核心文件的名称传给GDB,就可以研究进程结束时的状态。“分析内核文件”的做法和一般调试的做法类似,由于程序已经停止在某个点,所以不能使用run、step、next、continue等命令让它继续执行。

     LearnGDBNote--ABeen.pdf

    参考:《C in a Nutshell》

  • 相关阅读:
    HTML基本知识
    几个常用的正则表达式
    C#操作文件
    传说中的WCF(3):多个协定
    传说中的WCF(2):服务协定的那些事儿
    查询表、存储过程、触发器的创建时间和最后修改时间
    SQL四舍五入及两种舍入
    自制 JS.format带分页索引
    js:字符串(string)转json
    $.each 和$(selector).each()的区别
  • 原文地址:https://www.cnblogs.com/abeen/p/1629410.html
Copyright © 2011-2022 走看看