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.pswp.cn/news/920372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920372.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5.5模型導入FBX強制x軸向前Force Front XAxis

很多軟件軸向都是不同的 , 所以模型導入虛幻的時候 可以勾選Force Front XAxisUE5.5 在右上角設置 點擊右上角三個點就可以看到強制前X軸

Docker中如何記錄非交互式連接ssh用戶操作的所有命令記錄?

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

渦旋場和撓場的對偶性方程組

要將渦旋場與撓場的動態對偶性以麥克斯韋方程組的形式嵌入愛因斯坦-嘉當理論的彎曲時空框架中。一、符號與幾何基礎1. 基本張量定義 度規張量: g_{\mu\nu} (描述時空彎曲, \mu,\nu 0,1,2,3 )。仿射聯絡: \Gamma^\la…

8.28日QT

思維導圖#include <iostream>using namespace std;int main() {int a0,b0,c0,d0;string i;cout << "請輸入一個字符串" << endl;getline(cin,i);int yi.size()-1;while(1){if(a<i[y]&&i[y]<z){aa1;}else if(A<i[y]&&i[y]…

跨網絡通信:路由器如何實現全球互聯

目錄 一、跨網絡的兩臺主機通信 二、采用不同通信標準的兩個局域網內的主機通信 三、路由器實現的“認路”功能、數據傳輸&#xff1a;封裝與解封裝 四、認識IP地址 五、為什么訪問目標主機需要經過路由器&#xff1f; 1、網絡劃分 2、尋址與轉發 六、目的IP地址的核心意…

HTTP 頭

HTTP 頭&#xff08;HTTP Header&#xff09;是 HTTP 請求/響應中用于傳遞元數據的關鍵部分&#xff0c;分為 請求頭&#xff08;Request Header&#xff09;、響應頭&#xff08;Response Header&#xff09;、通用頭&#xff08;General Header&#xff09; 和 實體頭&#x…

vue 海康視頻插件

背景&#xff1a; 在vue項目中&#xff0c;需要在pc端播放視頻&#xff0c;播放的視頻包括視頻實時、視頻回放等。 寫文思路&#xff1a; 海康視頻對接流程&#xff0c;了解海康視頻插件&#xff0c;前端開發項目并引入依賴&#xff0c;前端開發封裝的組件&#xff0c;組件的調…

【URP】Unity 插入自定義RenderPass

【從UnityURP開始探索游戲渲染】專欄-直達 自定義渲染通道是一種改變通用渲染管道&#xff08;URP&#xff09;如何渲染場景或場景中的對象的方法。自定義呈現通道(RenderPass)包含自己的Render代碼&#xff0c;可以在注入點將其添加到RenderPass中。 添加自定義呈現通道(Rend…

DevSecOps 集成 CI/CD Pipeline:實用指南

就在你以為軟件開發已無簡化的余地時&#xff0c;新的解決方案應運而生 隨著軟件開發幾乎每天都在攀升&#xff0c;組織不斷嘗試以前所未有的速度交付新功能和應用程序。雖然持續集成和持續交付 &#xff08;CI/CD&#xff09; Pipeline 徹底改變了軟件部署&#xff0c;但它們…

vue2+elementui 表格單元格增加背景色,根據每列數據的大小 顏色依次變淺顯示

注釋&#xff1a; vue2elementui 表格列實現一個功能&#xff0c;給定兩個顏色&#xff1a;紅色 #f96d6f 和 綠色 #63be7b&#xff0c;列數據正數時表格單元格背景色為紅色&#xff0c;列數據負數時表格單元格背景色為綠色&#xff0c;根據數據的大小顏色依次越來越淡&#xff…

【JavaEE】(19) MyBatis-plus

一、MyBatis Generator 為 MyBastis 框架設計的代碼生成工具&#xff0c;簡化持久層編碼工作。根據數據庫表自動生成 Java 實體類、Mapper 接口、SQL 的 xml 文件。讓開發者專注于業務邏輯。 1、引入插件 MyBatis 官網搜索 MyBatis Generator 插件&#xff1a;Running MyBatis…

Android之騰訊TBS文件預覽

文章目錄前言一、效果圖二、實現步驟1.去官網注冊并創建應用[騰訊官網](https://console.cloud.tencent.com/tbs/client)2.下載arr文件并引入[騰訊TBS](https://download.csdn.net/download/Android_Cll/91764395)3.application實例化4.activity實例化5.下載網絡文件6.PreviewA…

基于微信小程序的化妝品成分查詢系統源碼

源碼題目&#xff1a;基于微信小程序的化妝品成分查詢系統源碼?? 文末聯系獲取&#xff08;含源碼、技術文檔&#xff09;博主簡介&#xff1a;10年高級軟件工程師、JAVA技術指導員、Python講師、文章撰寫修改專家、Springboot高級&#xff0c;歡迎高校老師、同行交流合作。畢…

STM32 啟動執行邏輯與代碼燒入方法詳解:從底層原理到實操落地

STM32 啟動執行邏輯與代碼燒入方法詳解&#xff1a;從底層原理到實操落地背景概要STM32啟動和執行的核心邏輯鏈條代碼燒入到STM32的途徑方法結束語背景概要 在學習STM32時候我們知道代碼需要通過一些下載器&#xff08;如ST-Link、J-Link&#xff09;或者串口下載燒入到STM32芯…

Go對接印度股票數據源指南:使用StockTV API

一、StockTV API簡介 StockTV提供全球200國家的實時金融數據&#xff0c;覆蓋股票、外匯、期貨和加密貨幣市場。針對印度市場&#xff08;國家ID14&#xff09;&#xff0c;其主要優勢包括&#xff1a; 毫秒級低延遲響應7x24小時穩定服務日均處理億級數據免費技術支持 官方資源…

ESP8266:Arduino學習

ESP8266一&#xff1a;環境搭建使用Ardino框架&#xff0c;在官網下載&#xff0c;下載離線的支持包二&#xff1a;實現簡單的項目1. 點燈{pinMode(LED_PIN, OUTPUT); // 設置引腳為輸出模式digitalWrite(LED_PIN, HIGH); // 點亮 LED}I/O引腳的三種模式分別為&#xff1a;INPU…

青少年軟件編程(python六級)等級考試試卷-客觀題(2023年3月)

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 六級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 青少年軟件編程&#xff08;python六級&#xff09;等級考試試卷-客觀題&#xff08;2023年3月&#xff09…

mongodb influxdb

、您需要提前配置 MongoDB 和 InfluxDB。讓我幫您說明配置步驟&#xff1a; MongoDB 配置 啟動 MongoDB 容器后&#xff0c;進入容器創建數據庫&#xff1a; # 進入 MongoDB 容器 docker exec -it mongo mongosh -u root -p 123456# 創建 product 數據庫 use product# 創建集合…

模擬電路中什么時候適合使用電流傳遞信號,什么時候合適使用電壓傳遞信號

一、應用 1.實際應用中&#xff0c;需要進行權衡&#xff0c;比如抗干擾能力&#xff0c;傳輸距離&#xff0c;功耗 2.電壓信號比較容易受到干擾&#xff0c;對噪聲比較敏感&#xff0c;有噪聲容限一說 3.電流信號對噪聲不敏感 4.電源電壓下降的穩定性或者長距離傳輸中的損耗問…

Flink2.0學習筆記:使用HikariCP 自定義sink實現數據庫連接池化

stevensu1/EC0823: Flink2.0學習筆記&#xff1a;使用HikariCP 自定義sink實現數據庫連接池化 在 Flink 流處理應用中使用 HikariCP 實現數據庫連接池化&#xff0c;對于寫入關系型數據庫&#xff08;如 MySQL、PostgreSQL&#xff09;的 自定義 Sink 來說&#xff0c;不僅是推…