• 在海思芯片上使用GDB远程调试


    1 前言

            使用海思平台上(编译工具链:arm-himix200-linux)交叉编译 GDB 工具(使用版本8.2,之前用过10.2的版本,在编译 gdbserver 遇到编译出错的问题,因为关联了其他静态库等,尝试解决,但是遇到了一些其他问题,因为时间问题折腾了一段时间就放弃使用10.2的版本了)。

            通过使用 gdb+gdbserver 远程调试目标板,之后可以通过 VSCode 配置好后实现和 IDE 集成开发环境一样的比较直观方便调试。


    2 编译

    2.1 前期准备

            1)下载 gdb(网上很多,搜素就能下载,我选择的是 gdb-8.2)

            2)解压缩,输入指令解压 tar -vxzf gdb-8.2.tar.gz

            3)进入解压后的目录中 cd gdb-8.2

    2.2 环境配置

    2.2.1 编译 gdb

    1)配置生成 Makefile 文件

    copy
    ./configure --target=arm-himix200-linux --prefix=~/gdbTool

    --target=arm-himix200-linux 意思是说目标平台是运行于ARM体系结构的linux内核;

    --program-prefix=arm-himix200-linux 是指生成的可执行文件的前缀,比如 arm-himix200-linux-gdb(可选参数)

    --prefix= 是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建(当然,权限足够的话)

    2)编译、安装

    copy
    make & make install

    会在--prefix 指定的目录下生成四个子目录:bin、include、lib 和 share,我们需要的 arm-himix200-linux-gdb 就在其中的bin目录下。

    2.2.2 编译 gdbserver

    1)进入 gdbserver 目录下(不同的版本路径不一样,比如 gdb-8.2 的路径为 gdb-8.2/gdb/gdbserver,而 gdb-10.2 的路径为 gdb-10.2/gdbserver),则指令为cd gdb/gdbserver

    2)在 gdbserver 目录下配置生成 Makefile 文件

    copy
    ./configure --host=arm-himix200-linux --prefix=~/gdbTool

    --host=arm-himix200-linux 指定了生成可执行文件运行的平台和系统:运行于ARM平台的Linux系统

    --prefix= 是指生成的可执行文件安装在哪个目录

    3)编译、安装(会在--prefix 指定的目录下生成 bin 目录,gdbserver 就在 bin 目录下)

    copy
    make & make install

    3 使用步骤

    3.1 前期准备

    将之前生成的 gdbserver 调试程序放在目标板上或者通过 nfs 方式运行也可以.这样就可以用 gdb 和 gdbserve 远程调用来调试目标板上的程序了。

    一般情况 gdbserver 程序较大,所以建议采用 nfs 的方式挂载在目标板上运行较好,也可以通过 strip 减少 gdbserver 的大小(删除程序中符号表、调试符号表信息等)

    3.2 执行 gdbserver

    在目标板上运行需要调试的程序,如

    copy
    ./gdbserver --remote-debug 192.168.1.100:8005 test

    192.168.1.100 为宿主机的 IP 地址; 8005 是用来作为 gdb 调试监听的端口,可自行设置;test 是编译好的目标板程序

    (为了更好的使用 gdb 的调试功能,在编译目标板程序时需加入 -g 选项

    3.3 执行 gdb

    1、在宿主机上运行 gdb 程序

    copy
    ./arm-himix200-linux-gdb test

    arm-himix200-linux-gdb 是编译 gdb 生成安装在 bin 目录下的文件,名称可能因为设置了 --program-prefix 参数有所改变,test 是和目标板上的 test 一样的程序文件

    2、进入 gdb 调试状态后,连接目标板

    copy
    (gdb) target remote 192.168.1.102:8005

    192.168.1.102 为目标板的 IP 地址,8005 则是 gdb 调试监听的端口

    3、连接成功后则开始运行,宿主机之后根据 gdb 指令设置断点、单步调试等功能进行调试

    copy
    (gdb) r

    GDB常用的调试指令

    GDB 调试器提供有大量的调试选项,可满足大部分场景中调试代码的需要。如表所示,罗列了几个最常用的调试指令(包含指令缩写)及各自的作用:

    调试指令 作 用

    (gdb) break xxx 

    (gdb) b xxx

    在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置。

    (gdb) run 

    (gdb) r

    执行被调试的程序,其会自动在第一个断点处暂停执行。

    (gdb) continue 

    (gdb) c

    当程序在某一断点处停止运行后,使用该指令可以继续执行,直至遇到下一个断点或者程序结束。

    (gdb) next 

    (gdb) n

    令程序一行代码一行代码的执行。

    (gdb) print xxx 

    (gdb) p xxx

    打印指定变量的值,其中 xxx 指的就是某一变量名。

    (gdb) list

    (gdb) l

    显示源程序代码的内容,包括各行代码所在的行号。

    (gdb) quit 

    (gdb) q

    终止调试。

     

     

     

  • 相关阅读:
    Xcode控制台调试常用命令
    MySQL基础(DDL、DML、DQL)
    使用Plotly可视化
    Mac环境下反编译工具的使用
    【CVPR2022】NFormer: Robust Person Re-identification with Neighbor Transformer
    Bash常见快捷键
    同步FIFO的verilog实现(2)——高位扩展法
    仿Mac程序坞放大动画
    【Swift 60秒】01 - Variables - 变量
    2.7 Time Series
  • 原文地址:https://www.cnblogs.com/const-zpc/p/16364427.html