zoukankan      html  css  js  c++  java
  • gdb安装和使用

    gdb安装

    gdb的layout功能依赖于curses,安装curses包

    https://ftp.gnu.org/pub/gnu/ncurses/

    下载gdb包,安装

    http://ftp.gnu.org/gnu/gdb/gdb-10.1.tar.gz

    1. G++调试相关编译选项

    G++在编译时需要将调试信息加到可执行文件中,编译时添加选项-g,将调试信息加载到可执行文件中。如果没有添加-g选项,将看不到程序的函数名和变量名,全是运行时的内存地址,不利于调试。

    gdb命令使用

    (1)  启动gdb

    调试可执行程序  gdb 可执行程序名

    调试服务程序    gdb 程序名  进程id

    调试core文件  gdb 程序名  core文件名

    (2)  交互命令

    run 运行程序,遇到断点后停止,等待用户输入下一步的命令。

    continue 继续执行,到下一个断点停止。

    step 单步调试,如果遇到函数则进入函数。

    next 执行下一条指令

    until + 行号 运行到指定行

    finish 运行程序,直到当前函数返回

    call 函数名(参数)

    quit 退出gdb

    (3)  设置断点

    break n 在第n行设置断点

    break func 在函数func入口处设置断点

    info break 显示当前程序的断点设置情况

    disable 断点号 禁用断点

    enable 断点号 启用断点

    delete 断点号 删除断点

    (4)  查看源代码

    list 列出程序的源代码,默认每次显示10行

    list 行号 显示当前文件以行号为中心的前后10行代码

    list 函数名 显示函数源码

    disas 反汇编当前函数

    (5)  输出变量和表达式

    print 表达式 表达式可以是当前正在测试程序的有效表达式。

    print 变量 打印变量的值

    print ++a(a是整数类型) 将a加1,并打印出来

    print func(a) 以变量a为参数调用func函数

    print $rax 十进制形式打印%rax

    print /x $rax 十六进制形式打印%rax

    print /t $rax 二进制形式打印%rax

    print /x ($rsp + 8) 十六进制形式打印(%rsp + 8)

    print *(long *)0x7fffffffffffe818 打印内存中0x7fffffffffffe818的长整数

    print *(long *)($rsp + 8) 打印内存中($rsp + 8)的长整数

    display 变量 单步运行后紧接着输出该变量的值

    undisplay 变量号 取消显示变量

    info locals 显示当前堆栈中所有的局部变量

    info registers 显示寄存器的值

    (6)  查询运行信息

    where 当前的运行函数堆栈列表

    set args 数值 指定运行时参数

    show args 查看设置的参数

    例:

    #include <stdio.h>

    int main(int argc, char* argv[]){

    int i;

    for (int i = 0; i < argc; i++){

    printf("The %ith argument is %s ", i, argv[i]);

    }

    return 0;

    }

    (gdb) set args hello world   (或者直接运行 ./argsTest hello world)

    (gdb) run

    Starting program: /home/wangjian/workspace/cpp/test/argsTest hello world

    The 0th argument is /home/wangjian/workspace/cpp/test/argsTest

    The 1th argument is hello

    The 2th argument is world

    [Inferior 1 (process 10036) exited normally]

    (7)  分割窗口

    layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:

    layout src:显示源代码窗口

    layout asm:显示汇编窗口

    layout regs:显示源代码/汇编和寄存器窗口

    layout split:显示源代码和汇编窗口

    layout next:显示下一个layout

    layout prev:显示上一个layout

    Ctrl + L:刷新窗口

    Ctrl + x,再按1:单窗口模式,显示一个窗口

    Ctrl + x,再按2:双窗口模式,显示两个窗口

    Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。

  • 相关阅读:
    IDEA成功注册方法
    H2O中的随机森林算法介绍及其项目实战(python实现)
    scala语言简介及其环境安装
    SparkSQL---实战应用
    Spark算子---实战应用
    利用python的KMeans和PCA包实现聚类算法
    Spark MLlib回归算法------线性回归、逻辑回归、SVM和ALS
    m个苹果放在n个盘子里面有多少种放法?(动态规划)
    Java_CookieUtil
    Jquery_AjaxFileUpload插件的使用记录
  • 原文地址:https://www.cnblogs.com/feng-ying/p/14624064.html
Copyright © 2011-2022 走看看