Linux-筆記 嵌入式gdb遠程調試

目錄

前言

實現

? ? ? ? 1、內核配置

? ? ? ? 2、GDB移植

? ? ? ? 3、準備調試程序

? ? ? ? 4、開始調試


前言

? ? ? ? gdb調試器是基于命令行的GNU項目調試器,通過gdb工具我們可以實現許多調試手段,同時gdb支持多種語言,兼容性很強。?

????????在桌面 Linux 系統(如 Ubuntu、CentOS 等)上,我們通常可以直接運行 gdb 來調試程序。然而,在嵌入式系統中,由于芯片性能較弱,直接運行 gdb 不太現實(除非是性能較強的嵌入式芯片)。因此,我們通常在 PC 端運行 gdb 工具,源碼也在 PC 端,而對應的可執行文件則放在開發板上運行。為了實現這一點,我們需要在開發板上運行gdbserver,通過網絡與 PC 端的 gdb 進行通信。因此,要在 PC 上通過 gdb 調試嵌入式程序,需要兩個工具:gdb 和 gdbserver,其中 gdb 在 PC 上運行,gdbserver 則需要移植到開發板上運行。

? ? ? ? 一般的交叉編譯器已經自帶了GDB工具,主要為:gdb與gdbserver。在交叉編譯器安裝目錄的bin目錄內就有這兩個工具。需要注意的是,不同的交叉編譯工具鏈編譯的可執行文件是不一樣的,要注意開發平臺上的文件系統編譯使用的是什么交叉編譯工具鏈,不然在執行gdbserver的時候會一直報錯說找不到文件以及“During startup program exited with code 127”的報錯信息。

實現

平臺:T113

服務器:Ubuntu 16.04

交叉編譯器:gcc-arm-linux-gnueabi

? ? ? ? ?1、內核配置
Kernel hacking  --->[*] Kernel debugging[*] KGDB: kernel debugger[*] Compile the kernel with debug info[*] KGDB: use kgdb over the serial console

? ? ? ? 2、GDB移植

? ? ? ? 進入交叉編譯器安裝目錄的bin目錄內,可以看到里面自帶了gdbserver工具,將其放置到開發平臺的根文件系統的/usr/bin目錄即可。

? ? ? ? 3、準備調試程序

? ? ? ? 簡單編寫一個應用程序,使用交叉編譯器編譯成可執行文件,記得要加上“-g”,表示編譯的時候加上調試信息,編譯后使用scp傳輸到開發平臺上。

#include <stdio.h>
#include <unistd.h>int main(int argc, char *argv[])
{unsigned int times = 0;for (int i=0; i<5; i++) {printf("runing times:%d\r\n", times);times++;sleep(1);}
}

????????????????????????

? ? ? ? 4、在開發平臺輸入命令開啟gdbserver等待PC端連接

gdbserver 192.168.31.54:2001 gdbtest
·gdbserver 工具
·192.168.31.54 PC端IP
·2001 端口 隨便整一個
·gdbtest 應用程序

????????

????????如果輸入后報錯說找不到文件或者報錯“During startup program exited with code 127”那就可能是交叉編譯器不對,編譯出來的文件不可執行,這是本人遇到的情況。

? ? ? ? 5、PC端運行gdb工具進行調試,運行后就會如下圖等待我們輸入命令。

./arm-linux-gnueabi-gdb  /<具體路徑>/gdbtest

? ? ? ? 6、連接到開發平臺,輸入命令連接

//連接到開發板上
target remote 192.168.31.28:2001 
·192.168.31.28 開發板IP
·2001  端口

? ? ? ? 看看開發板的情況,可以看到已經連接上了,接下來就可以進行調試了。

??????????

? ?4、開始調試

? ? ? ? 在調試前先了解一下gdb的命令

命令作用
? ? ? ? l列出所有程序源碼
????????b設置斷點
????????c運行到斷點處
????????s單步運行(會運行到函數里面)
????????n單步運行(不會進函數里)
????????p打印某個變量值
????????q退出gdb調試界面,運行后開發板上的gdbserver也會停止

????????1)列出程序源碼

????????

? ? ? ? 2)設置斷點到main函數

???????????????????????

? ? ? ? 3)運行程序,遇到斷點會停下,可以看到停在了main起始位置

????????

? ? ? ? 4)單步運行(進函數內),運行四次

???????????????

? ? ? ? 5)打印變量值,可以看到已經=1了,因為我們運行過一次完整的循環了

?????????????????? ??

? ? ? ? 6)自動執行程序,輸入命令c,可以看到運行結束了,同時開發板也會打印出調試信息。

???????????????????????

???????????????? ???????

? ? ? ? 7)PC端退出gdb調試

???????????????????????????????????????????????????????????????????????????????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37616.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37616.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37616.shtml

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

相關文章

跨越地域界限:Eureka實現跨區域服務發現全解析

跨越地域界限&#xff1a;Eureka實現跨區域服務發現全解析 在微服務架構的浪潮中&#xff0c;服務的分布式部署已成為常態。隨著業務的全球擴展&#xff0c;服務往往需要跨區域甚至跨國界進行部署。在這樣的背景下&#xff0c;服務發現機制面臨著新的挑戰——如何實現不同區域…

如何在服務器中找到數據庫文件路徑

在服務器中找到數據庫文件路徑的具體方法取決于您所使用的數據庫管理系統和服務器的操作系統。以下是一些常見的數據庫系統&#xff08;如MySQL、Microsoft SQL Server、Oracle、PostgreSQL和MongoDB&#xff09;的文件路徑查找方法的詳細步驟&#xff1a; MySQL 通過命令行查…

Redis基礎教程(三):redis命令

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;歡迎各位來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里不僅可以有所收獲&#xff0c;同時也能感受到一份輕松歡樂的氛圍&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

08 - Python面向對象編程進階

面向對象進階 在前面的章節我們已經了解了面向對象的入門知識&#xff0c;知道了如何定義類&#xff0c;如何創建對象以及如何給對象發消息。為了能夠更好的使用面向對象編程思想進行程序開發&#xff0c;我們還需要對Python中的面向對象編程進行更為深入的了解。 property裝…

六西格瑪綠帶培訓的證書有什么用處?

近年來&#xff0c;六西格瑪作為一套嚴謹而系統的質量管理方法&#xff0c;被廣泛運用于各行各業。而六西格瑪綠帶培訓證書&#xff0c;作為這一方法論中基礎且重要的認證&#xff0c;對于個人和企業而言&#xff0c;都具有不可忽視的價值。本文將從多個角度深入探討六西格瑪綠…

重寫功能 rewrite

Nginx服務器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此編譯之前要安裝PCRE庫&#xff0c;rewrite是nginx服務器的重要功能之 一&#xff0c;用于實現URL的重寫&#xff0c;URL的…

充電寶口碑哪個好?好用充電寶品牌有哪些?好用充電寶推薦

充電寶作為我們日常生活和出行的重要伙伴&#xff0c;其品質和性能直接影響著我們的使用體驗。今天&#xff0c;就來和大家探討一下充電寶口碑哪個好&#xff0c;為大家盤點那些備受贊譽的好用充電寶品牌&#xff0c;并向您推薦幾款值得入手的充電寶&#xff0c;外出時不再擔心…

mac英語學習工具:Eudic歐路詞典 for Mac 激活版

Eudic歐路詞典是一款非常受歡迎的英語學習軟件&#xff0c;它提供了豐富的詞匯解釋、例句、同義詞、反義詞等功能&#xff0c;幫助用戶更好地理解和掌握英語單詞。 以下是Eudic歐路詞典的一些主要特點&#xff1a; 海量詞匯庫&#xff1a;Eudic歐路詞典擁有龐大的詞匯庫&#…

flutter photo_manager 報錯:Error: ‘DecoderCallback‘ isn‘t a type.

看看是不是你的photo_manager版本少于3.0。如果是少于3.0&#xff0c;請及時升級到3.0及以上版本&#xff0c;同時因為photo_manager3.0不再提供 AssetEntityImageProvider 這個方法&#xff0c;會導致報錯&#xff0c;不要慌&#xff0c;請添加下方的庫即可解決問題&#xf…

為什么人人都要懂一些銷售思維

創業看事情的高度、考慮的維度比做銷售更高、更復雜、更全面&#xff0c;銷售思維、銷售方法更多時候用在解決局部問題&#xff0c;幫我們打局部戰爭&#xff0c;它是術。 但是&#xff0c;我仍然認為&#xff0c;銷售思維是一種很有用、有效、有力量、必要的思維。我們每個人…

面試題002-Java-Java集合

面試題002-Java-Java集合 目錄 面試題002-Java-Java集合題目自測題目答案1. 說說 List,Set,Map 三者的區別&#xff1f;三者底層的數據結構&#xff1f;2. 有哪些集合是線程不安全的&#xff1f;怎么解決呢&#xff1f;3. 比較 HashSet 、LinkedHashSet 和 TreeSet 三者的異同&…

簡過網:考一建需要報培訓班嗎?報班費用是多少錢

近幾年來&#xff0c;越來越多的朋友都開始關注和參與備考一建&#xff0c;那么&#xff0c;大家在備考一建時&#xff0c;都報培訓班了嗎&#xff1f;報班的費用是多少錢&#xff1f;接下來&#xff0c;我們一塊來了解一下吧&#xff1f; ? 一、考一建需要報培訓班嗎&#…

【Jetpack】Lifecycle之自定義LifecycleOwner

Lifecycle設計講解 Lifecycle的設計其實十分簡單&#xff0c;主要就是Lifecycle對象和LifecycleOwner接口 Lifecycle用于記錄對象的生命周期&#xff0c;以及在生命周期發生改變時通知外部 LifecycleOwner用于表示對象具備生命周期管理能力 LifecycleOwner的實現方式很簡單&…

賽目科技三度遞表:凈利率及資產回報率不斷下滑,經營成本越來越高

《港灣商業觀察》施子夫 5月29日&#xff0c;北京賽目科技股份有限公司&#xff08;以下簡稱&#xff0c;賽目科技&#xff09;第三次遞表港交所&#xff0c;公司擬主板上市&#xff0c;獨家保薦機構為光銀國際。 公開信息顯示&#xff0c;賽目科技此前曾于2022年12月&#x…

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1+小程序:原生開發+多學校Saas 模式

Java全套智慧校園系統源碼&#xff1a;核心功能、發展趨勢、基于電子班牌&#xff1a; Android 7.1小程序&#xff1a;原生開發多學校Saas 模式 智慧校園系統是一個集成了多種功能的綜合性平臺&#xff0c;旨在提升校園內的教學、管理、服務等方面的效率和體驗。那么&#xff…

比較(五)利用python繪制棒棒糖圖

比較&#xff08;五&#xff09;利用python繪制棒棒糖圖 棒棒糖圖&#xff08;Lollipop plot&#xff09;簡介 棒棒糖圖實際上是修飾后的條形圖。當在處理大量的值&#xff0c;并且當這些值都很高時&#xff0c;棒棒糖圖就很有用。 快速繪制 基于matplotlib import pandas as…

【前端環境1】安裝nvm

【前端環境1】安裝nvm 寫在最前面一、下載nvm二、安裝教程三、驗證nvm安裝 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻時光&#xff0c;感謝你的陪伴與支持 ~ &#x1f680; 歡迎一起踏上探險之旅&#xff0c;挖掘無限可能&#xff0c;共同成…

狗都能看懂的Reinforcement Learning簡介

文章目錄 一、什么是強化學習二、強化學習的應用 一、什么是強化學習 強化學習的流程可以用上面這張圖來說明&#xff1a;智能體&#xff08;Agent&#xff09;對環境進行觀測&#xff0c;然后根據觀測結果&#xff08;Observation / State&#xff09;采取相應的動作&#xff…

實現Ubuntu計劃任務的反彈shell

一、實驗環境 Ubuntu&#xff1a;IP地址&#xff1a;192.168.223.156 Kali : IP地址&#xff1a;192.168.223.152 二、編寫crontab計劃任務 在Ubuntu的系統中使用crontab -e命令編寫計劃任務&#xff0c;如下所示&#xff1a; 作用&#xff1a;是將一個交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《這篇》有介紹DT_MACHINE_START的一些初始化操作&#xff0c;匹配上就會在后續的初始化中調用DT_MACHINE_START的成員來初始化系統的設備樹&#xff0c;時鐘&#xff0c;中斷等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…