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

    【前言】使用gdb调试前,在编译程序时,要加 -g 选项,否则你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

    gdb -q a.out //-q(uiet)表示不打印gdb的版权信息


     【调试环境】

    1、【运行参数】

    set args 可指定运行时参数。(如:set args 10 20 30 40 50)
    show args 命令可以查看设置好的运行参数。

    2、【环境变量】

    path <dir> 可设定程序的运行路径。
    show paths 查看程序的运行路径。
    set environment varname [=value] 设置环境变量。如:set env USER=hchen
    show environment [varname] 查看环境变量。

    3、【工作目录】

    cd <dir> 相当于shell的cd命令。
    pwd 显示当前的所在目录。


     【设置观察点】

    观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

    watch <expr>
    为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。[如watch i==100,当该条件成立时程序会暂停执行]

    观察某个地址的数据变化  watch *(int*)0x00000000


     【分割窗口】

    layout:用于分割窗口,可以一边查看代码,一边测试:
    layout src:显示源代码窗口
    layout asm:显示反汇编窗口
    layout regs:显示源代码/反汇编和CPU寄存器窗口
    layout split:显示源代码和反汇编窗口
    Ctrl + L:刷新窗口


     1、开始调试

    a.  gdb <program> 

    program也就是你的执行文件,一般在当前目录下。

    b. gdb <program> core

    用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

    2、【列出源码】,从第n行开始(编译时要加 -g 选项)

    l n

    3、【设置断点】在第N行加断点

    break n

    4、【设置断点】在函数func()入口处设置断点

    break func

    5、【查看断点信息】

    info break

    命中断点后自动打印调用栈

    set pagination off

    b malloc
    commands 1 (1表示断点编号,用i b可以查询所有断点)
    bt
    continue
    end
    c

    6、【单步执行】

    n ----[next的缩写]

    7、【继续运行】

    c ----[continue的缩写]

    8、【打印变量的值】

    p varname

    9、 【查看内存中数据】

    x/<n/f/u> <addr>

    n---正整数,表示需要显示的内存单元的个数

    f---显示格式(format,如果要打字符串的话,可以用x/s,默认十六进制格式)

    x 按十六进制格式显示变量。

    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量

    u---每个单元大小(the unit size,从当前地址往后请求的位宽大小,如果不指定的话,gdb默认是4Bytes)

    取值范围:

    b---单字节

    h---双字节

    w---四字节

    g---八字节

    10、【查看调用栈】

    bt

    11、【退出函数】

    finish

    12、【退出gdb】

    q ----[quit的缩写]

    13、【gdb中执行shell命令】

    shell <command string>

    14、

  • 相关阅读:
    在.NET中读取嵌入和使用资源文件的方法
    T-SQL with关键字 with as 递归循环表
    IIS 部署WCF时遇到这么个错:
    WCF引用 代码
    C#中Windows通用的回车转Tab方法
    HTTP 错误 500.21
    如果你想开发一个应用(1-14)
    如果你想开发一个应用(1-13)
    如果你想开发一个应用(1-12)
    如果你想开发一个应用(1-11)
  • 原文地址:https://www.cnblogs.com/cgc0415/p/7219817.html
Copyright © 2011-2022 走看看