• gdb工具使用方法和常用指令介绍


    1、gdb工具介绍

    1.1、gdb和gdb server的区别

    (1)gdb server运行在设备上,运行要调试的程序并监听是否有客户端要连接;gdb运行在虚拟机或者编译服务器上,通过向gdb server发送命令,完成调试;
    (2)gdb直接运行在调试机上,运行要调试的程序并用命令来调试程序;
    (3)gdb和gdb server在连接方式上有区别,但是在gdb的命令上几乎一样;

    1.2、gdb功能介绍

    (1)启动你的程序,按照你自定义的方式运行程序;
    (2)可以让被调试的程序,在你设置的指定断点处停住;
    (3)当程序被停住时,查看此时程序中发生的事情;
    (4)动态的改变程序的执行环境;

    1.3、gdb源码获取

    (1)源码下载网址:http://ftp.gnu.org/gnu/gdb/;
    (2)编译gdb源码:
    a)配置configure,(主要是配置交叉编译工具链、安装目录;
    b)运行Makefile:make & make install;
    (3)大概率不能直接编译通过,不建议去编译源码,问老员工或者芯片的技术支持有没有对应平台的gdb工具;

    1.4、被gdb调试的程序的要求

    (1)被GDB调试的程序,不能被arm-linux-stripe,否则程序没有符号信息。就是要用debug版本的sonia来调试;
    (2)在gdb调试时,有的变量看不到值,显示被优化:是因为在编译程序的时候,优化等级过高,可在去掉-o2等优化编译选项;
    (3)编译源码时需要加上“-g”编译选项;(创建符号表,符号表包含了程序中使用的变量名称的列表)

    2、gdb的使用方法

    (1)程序未运行:gdb + 程序;
    (2)程序已经运行:gdb -p + 进程号;

    3、gdb server使用方法

    3.1、设备端

    gdb_server 10.6.5.204:2345 ./app
    
    • 1

    (1)gdb_server:gdb server工具;
    (2)10.6.5.204:虚拟机或者编译服务器的ip地址;
    (3)2345:是监听的端口号,和客户端要匹配;
    (4)./app:要调试的程序;

    3.2、虚拟机或者编译服务器端

    (1)arm-himix200v002-linux-gdb	./app
    
    //进入gdb命令行,连接gdb server
    (2)target remote 10.35.232.236:2345
    
    • 1
    • 2
    • 3
    • 4

    (1)先用gdb运行要调试的程序,注意这里的程序要和gdb_server运行的程序一样;
    (2)进入gdb命令行,连接服务器连接gdb server,注意两边的IP地址和端口号要匹配;
    (3)10.35.232.236:这是设备的ip地址;

    4、gdb下的常见指令介绍

    4.1、gdb中使用linux命令

    在这里插入图片描述

    只需要在命令前加上shell即可;

    4.2、常用指令

    命令解释
    run运行程序
    continue进行运行程序
    next单步运行
    quit退出gdb
    break设置断点
    print打印参数值
    show args查看参数
    info args查看当前函数的参数及其值
    info function显示所有函数名称
    bt查看栈信息
    set args指定运行时参数:set args 10 20 30

    4.3、断点设置指令

    break:设置断点,简写b
    	b func              断点函数
    	b file:linenum   断点文件行号
    	b *address       断点地址
    
    enable/disable:使能/去使能断点
    	en/dis  1         使能/去使能断点1
    	en/dis             使能/去使能所有断点
    
    delete:删除断点
    	delete 1            删除断点1
    	delete               删除所有断点
    
    info breakpoints:显示所有断点信息
    
    checkpoint:记录断点状态,用于恢复断点。不可用于多线程
    	checkpoint
    	restart 1
    	
    Info checkpoint:显示checkpoint信息
    
    watch:跟踪变量值,当变量值发生变化时,暂停
    	watch    a 局部变量,在跳出当前函数时会失败
    	watch    *0x600af0
    	
    Info watchpoint:显示watchpoint信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    Ribbon核心源码剖析
    K_A07_001 基于 STM32等单片机驱动A4988模块按键控制步进电机正反转
    Scrapy Splash--appinum-->介绍-环境配置
    想要裸辞做电商,有什么好的建议吗?做哪类产品比较好?
    在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求
    VUE基础知识五:组件的分类、组件间传值、事件调用等
    阿里健康大药房七周年峰会:两大变革叠加 风往何处吹
    `算法题解` `LuoGU` P3128 [USACO15DEC]Max Flow P
    剑指 Offer 66. 构建乘积数组
    es中的聚合查找
  • 原文地址:https://blog.csdn.net/weixin_42031299/article/details/124904418