• 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之前的调试窗口。

  • 相关阅读:
    商城问题
    web基础重难点
    业务流程
    主流框架面试题
    数据库:索引-引擎-优化
    【jquey代码】基于选中的checkbox 删除对应的一行数据
    javascript中获取json对象的value,拼接到页面上
    【json对象和json格式的字符串】
    【idea中创建springMVC项目的2个坑】不识别@Autowired 以及 Mapper.xml的配置
    【eclipse和idea】创建spring项目时的一处不同
  • 原文地址:https://www.cnblogs.com/feng-ying/p/14624064.html
Copyright © 2020-2023  润新知