当前位置: 首页 > news >正文

gdbserver远程调试和交叉编译gdb

1、交叉编译gdb

1.1下载源码

Gdb源码:wget https://ftp.gnu.org/gnu/gdb/gdb-15.2.tar.xz
Gdb依赖的源码:GMP、MPFR、ncurses(图形库)
GMP源码:wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz
MPFR源码:wget https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.1.tar.xz
ncurses源码:wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.4.tar.gz

1.2 交叉编译GMP

解压命令
tar xvf gmp-6.3.0.tar.xz
创建脚本,然后执行如图1的脚本

#! /bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export CFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT}"
./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-static

1.3 交叉编译MPFR

解压命令

tar xvf mpfr-4.2.1.tar.xz
创建脚本,然后执行如图2脚本
#! /bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
GMP_PATH=“gmp安装的路径”
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export CFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT}"./configure --host=$HOST --prefix=$PREFIX    --with-gmp=$GMP_PATH     --disable-shared --enable-static

1.4 交叉编译ncurses

解压命令
tar xvf ncurses-6.4.tar.gz
创建脚本,然后执行如图3脚本

#!/bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export LD=${CROSS_COMPILE}ld
export STRIP=${CROSS_COMPILE}strip
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export AS=${CROSS_COMPILE}as
GMP_PATH=“gmp安装路径”
MPFR_PATH=“mpfr安装路径”
./configure \--host=$HOST \--prefix=$INSTALL_PATH \--enable-static \--disable-shared \--without-ada \--without-cxx-binding \--without-tests \--without-progs \--enable-pc-files \--without-debug \--without-develop \--enable-widec \--disable-rpath

1.5 交叉编译gdb

解压命令
tar xvf ncurses-6.4.tar.gz
创建脚本,然后执行如图4脚本

#!/bin/bash
CROSS_COMPILE=“交叉编译工具目录”
SYSROOT="交叉编译头文件和库的目录"
HOST=“目标平台”
PREFIX="安装路径"
# 工具链设置
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export LD=${CROSS_COMPILE}ld
export STRIP=${CROSS_COMPILE}strip
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export AS=${CROSS_COMPILE}as
GMP_PATH=gmp安装路径
MPFR_PATH=mpfr安装路径
NCURSE_PATH=ncurses路径
export CPPFLAGS="-I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncursesw -I${GMP_PATH}/include -I${MPFR_PATH}/include"
export LDFLAGS="-L${NCURSE_PATH}/lib -L${GMP_PATH}/lib -L${MPFR_PATH}/lib --sysroot=${SYSROOT}"
export CFLAGS="-fPIC -g -O2 -I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncurses"
export CXXFLAGS="-fPIC -g -O2 -I${NCURSE_PATH}/include -I${NCURSE_PATH}/include/ncurses"./configure \
--host=$HOST \
--prefix=$INSTALL_PATH \
--with-sysroot=$SYSROOT \
--enable-tui \
--with-curses  \
--with-gmp=$GMP_PATH \
--with-mpfr=$MPFR_PATH

2 使用步骤

2.1 移植到开发板上

将gdb下的安装目录打包,然后把它移植到开发板上,然后配置环境变量PATH,
export PATH=$PATH:”你的gdb可执行文件路径”。

2.2 gdb远程连接

在板子上启动gdbserver:
命令:gdbserver :端口 可执行程序
在这里插入图片描述

① 在上位机上远程连接:
adb forward tcp:端号口tcp:端口号 (如果是adb连接需要转发如果是远程登录不用执行这一步)
② 执行程序
arm-openwrt-linux-gnueabi-gdb ./plt_if_test
其中arm-openwrt-linux-gnueabi-gdb是交叉编译工具链,plt_if_test是可执行文件,进入界面过后执行远程连接target remote localhost:10000,就可以连接到开发板上了。需要图形界面使用gdb命令ref就可以出现。当连接上gdbserver以后就可以像在本地调试一样使用gdb.

2.3 gdb远程调试

十分推荐远程调试,因为上位机上面有源码可以进行源码级调试,但是在板子上还需要把源码移植到板子上才能进行源码级调试。如果没有源码你会看到下面这种情况,只会显示哪个文件的行号。
在这里插入图片描述
在这里插入图片描述

在远程调试之前,需要在编译源码的时候加上标志-g,这样才能在编译好的可执行文件里面有符号表,才能显示出源码。
如下图所示远程调试步骤,首先打断点到main函数。
在这里插入图片描述
4.4.2 gdbserver调试段错误

在这里插入图片描述
可以看到当发生段错误的时候,在上位机这里面出现了接收到了板子上出现段错误,这时可以看到上面可视化窗口就有段错误出现的地方,也可以用bt full查看调用栈。

http://www.dtcms.com/a/355847.html

相关文章:

  • Fuzzy Multimodal Learning for Trusted Cross-modal Retrieval(CVPR 2025)
  • OpenCV 图像操作进阶:像素、边界与融合技术
  • 数据结构青铜到王者第九话---二叉树(2)
  • 多语言与零样本语音识别新突破:基于发音特征分类的方法
  • 通过ETL工具,同步SQLserver数据至starrocks数据库
  • Autosar之DCM模块
  • 构建AI智能体:十六、构建本地化AI应用:基于ModelScope与向量数据库的文本向量化
  • Day14 Gorm框架学习(1)
  • 安装与环境搭建:准备你的 Electron 开发环境
  • leetcode 525 连续数组
  • 可改善能源利用水平、削减碳排放总量,并为可再生能源规模化发展提供有力支撑的智慧能源开源了
  • 计算机组成原理3-3-5:定点数的乘法运算——补码阵列乘法器
  • init.usb.configfs.rc的USB动态配置
  • 算法学习笔记:双指针_滑动窗口专题
  • STM32CubeMX 6.15.0 + CLion
  • 3.渗透-.IP地址-详解
  • AI批量抠图工具,无需付费,永久使用
  • 报错记录 Error: CUDNN_STATUS_BAD_PARAM; Reason: finalize_internal()
  • 仓颉编程语言青少年基础教程:输入输出
  • Vue 自定义筛选组件:3 种全选反选场景的优雅实现
  • Groovy闭包语法详解
  • 【MySQL数据库入门课程】开课啦!
  • 一个是“内容生成器”,一个是“知识管理器”:VibeVoice 与 NoteBookLM 优劣对决?
  • 《零基础入门AI:YOLO目标检测模型详解(从基础概念到YOLOv1核心原理)》
  • Vue模版:Ant-design模态框弹窗
  • vue3的setup
  • 基于离散小波变换(DWT)的数字水印Matlab
  • @Indexed注解的作用
  • 整理3点结构点与点之间的距离
  • Paimon——官网阅读:非主键表