0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ARM平臺(tái)如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?

Tronlong創(chuàng)龍科技 ? 2021-09-28 18:17 ? 次閱讀

前 言

關(guān)于GDB工具

GDB工具是GNU項(xiàng)目調(diào)試器,基于命令行使用。和其他的調(diào)試器一樣,可使用GDB工具單步運(yùn)行程序、單步執(zhí)行、跳入/跳出函數(shù)、設(shè)置斷點(diǎn)、查看變量等等,它是UNIX/LINUX操作系統(tǒng)下強(qiáng)大的程序調(diào)試工具。GDB支持多種語(yǔ)言,包括Ada、匯編、C/C++、D、Fortran、GO、Objective-C、OpenCL、Modula-2、Pascal和Rust。

GDB具有一種“遠(yuǎn)程”模式,此種模式多半是在為嵌入式系統(tǒng)進(jìn)行調(diào)試時(shí)使用,遠(yuǎn)程操作指的是:GDB在一部機(jī)器內(nèi)運(yùn)行,而要進(jìn)行調(diào)試的程序是在另一部機(jī)器上運(yùn)行,支持TCP/IP協(xié)議傳輸?shù)母鞣N網(wǎng)絡(luò),在TCP/IP網(wǎng)絡(luò)及協(xié)議上再加搭傳輸GDB專(zhuān)有的調(diào)試操作通信協(xié)議,如此便能進(jìn)行遠(yuǎn)程調(diào)試。

創(chuàng)龍科技已基于IMX8、ZYNQ、AM5728、AM5708、AM437x、AM335x、T3/A40i等平臺(tái)提供了GDB程序調(diào)試方法說(shuō)明。本文檔主要演示基于TLIMX8-EVM評(píng)估板的GDB程序調(diào)試方法說(shuō)明。如需其他平臺(tái)相關(guān)資料,請(qǐng)與我們聯(lián)系。

開(kāi)發(fā)環(huán)境

Windows開(kāi)發(fā)環(huán)境:Windows 7 64bit、Windows 10 64bit

虛擬機(jī):VMware15.1.0

Linux開(kāi)發(fā)環(huán)境:Ubuntu18.04.4 64bit

U-Boot:U-Boot-2020.04

Kernel:Linux-5.4.70

Linux SDK:5.4.70_2.3.0


硬件平臺(tái)

TLIMX8-EVM評(píng)估板(NXP i.MX 8M Mini)

TLIMX8-EVM評(píng)估板


1調(diào)試環(huán)境搭建

確保已搭建好NXPi.MX 8M Mini SDK開(kāi)發(fā)環(huán)境。若未完成搭建,請(qǐng)先參照產(chǎn)品資料用戶手冊(cè)目錄下的Linux開(kāi)發(fā)環(huán)境搭建手冊(cè),完成SDK開(kāi)發(fā)包的安裝和配置。

然后進(jìn)入SDK安裝目錄,并執(zhí)行如下命令加載SDK環(huán)境變量。

Host# cd /home/tronlong/SDK/

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

圖 1

如環(huán)境搭建正常,執(zhí)行如下命令可查看交叉編譯工具版本。

Host# aarch64-poky-linux-gcc -v

圖 2

2演示程序創(chuàng)建與編譯

執(zhí)行如下命令,新建一個(gè)GDB調(diào)試演示程序。

Host# mkdir test

Host# cd test/

Host# gedit test.c

圖 3

在tese.c文件中輸入如下代碼。

#include

void show() {

printf("show\n");

}

int main(int argc, char *argv[])

{

int arr[4] = {1, 2, 3, 4};

int i = 0;

for (i = 0; i < 4; i++) {

printf("arr[%d]: %d\n", i, arr[i]);

}

}

點(diǎn)擊Save,保存退出。


圖 4

執(zhí)行如下命令,修改test文件夾的權(quán)限。

Host# cd ..

Host# sudo chmod -R 777 test/


圖 5

執(zhí)行如下命令加載SDK環(huán)境變量,并進(jìn)行程序編譯。

備注:編譯時(shí)需添加-g參數(shù),編譯過(guò)程中的警告可忽略。

編譯完成后,將在test文件夾目錄下生成可執(zhí)行文件test。

Host# cd test/

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

Host# $CC -O0 -g test.c -o test

圖 6

評(píng)估板與PC機(jī)連接至同一個(gè)路由器后進(jìn)行上電,執(zhí)行如下命令通過(guò)網(wǎng)絡(luò)傳輸?shù)男问?,將編譯后的可執(zhí)行文件test拷貝至評(píng)估板。

Target# ifconfig //查看評(píng)估板的IP地址

圖 7

Host# scp test root@192.168.0.17:/home/root //將可執(zhí)行文件拷貝至評(píng)估板“/home/root/”目錄下,密碼為空即可

圖 8

Target# ls -l //查看評(píng)估板接收的可執(zhí)行文件

圖 9

3調(diào)試程序運(yùn)行

執(zhí)行如下命令,確認(rèn)虛擬機(jī)的IP地址。

Host# ifconfig

圖 10

在評(píng)估板文件系統(tǒng)test文件所在路徑下,執(zhí)行如下命令運(yùn)行g(shù)dbserver程序,開(kāi)啟監(jiān)聽(tīng)。

備注:192.168.0.83為虛擬機(jī)的IP地址;1234為連接的端口號(hào)(自行設(shè)置);test為將要進(jìn)行調(diào)試的程序。如為Qt界面程序,則需在后面增加-qws參數(shù)。

Target# gdbserver 192.168.0.83:1234 test

圖 11

在PC機(jī)test文件所在路徑下,執(zhí)行如下命令加載SDK環(huán)境變量,并運(yùn)行GDB調(diào)試程序。

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

Host# aarch64-poky-linux-gdb test //aarch64-poky-linux-gdb為SDK交叉編譯環(huán)境下的GDB交叉編譯工具鏈,test為將要進(jìn)行調(diào)試的程序

圖 12

執(zhí)行如下命令,連接評(píng)估板。192.168.0.17為評(píng)估板的IP地址,請(qǐng)以實(shí)際情況為準(zhǔn)。

(gdb) target remote 192.168.0.17:1234

圖 13

同時(shí),串口調(diào)試終端顯示連接成功的相關(guān)信息。

圖 14

4程序調(diào)試

本章節(jié)主要演示GDB調(diào)試的幾個(gè)常用命令的使用方法。

4.1list命令

用于列出源碼,簡(jiǎn)寫(xiě):l。

圖 15

4.2break命令

用于設(shè)置斷點(diǎn),簡(jiǎn)寫(xiě):b。

圖 16

4.3info breakpoints命令

用于顯示斷點(diǎn)的狀態(tài),簡(jiǎn)寫(xiě):infob。

圖 17

4.4continue命令

用于恢復(fù)程序執(zhí)行,簡(jiǎn)寫(xiě):c。此命令使GDB恢復(fù)程序的執(zhí)行,直至斷點(diǎn)觸發(fā)或程序結(jié)束。

圖 18

以上調(diào)試過(guò)程在第二個(gè)斷點(diǎn)中,每輸入一次c命令,將會(huì)依次打印arr數(shù)組的元素值,然后程序執(zhí)行結(jié)束。同時(shí),串口調(diào)試終端打印相關(guān)信息。

圖 19

4.5print命令

用于打印變量或者變量地址,簡(jiǎn)寫(xiě):p。

圖 20

以上調(diào)試過(guò)程在每處斷點(diǎn)中,使用print命令打印變量i的值。同時(shí),串口調(diào)試終端打印相關(guān)信息。

圖 21

4.6quit命令

退出GDB模式,簡(jiǎn)寫(xiě):q。當(dāng)程序調(diào)試完成后,使用quit命令退出GDB調(diào)試。

圖 22

同時(shí),串口調(diào)試終端打印相關(guān)信息。

圖 23

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM處理器
    +關(guān)注

    關(guān)注

    6

    文章

    360

    瀏覽量

    41632
  • 嵌入式開(kāi)發(fā)

    關(guān)注

    18

    文章

    1018

    瀏覽量

    47470
  • gdb
    gdb
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    13268
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    天拓四方:PLC遠(yuǎn)程調(diào)試網(wǎng)關(guān)簡(jiǎn)介

    。隨著技術(shù)的發(fā)展,PLC遠(yuǎn)程調(diào)試網(wǎng)關(guān)應(yīng)運(yùn)而生,成為解決這一問(wèn)題的關(guān)鍵工具。 一、PLC遠(yuǎn)程調(diào)試網(wǎng)關(guān)的工作原理 PLC遠(yuǎn)程
    的頭像 發(fā)表于 10-09 14:26 ?163次閱讀

    PLC遠(yuǎn)程編程調(diào)試平臺(tái)是什么

    、靈活的管理需求。為此,PLC遠(yuǎn)程編程調(diào)試平臺(tái)應(yīng)運(yùn)而生,為工業(yè)自動(dòng)化帶來(lái)了革命性的變革。 PLC遠(yuǎn)程編程調(diào)試
    的頭像 發(fā)表于 10-08 14:26 ?155次閱讀
    PLC<b class='flag-5'>遠(yuǎn)程</b>編程<b class='flag-5'>調(diào)試</b><b class='flag-5'>平臺(tái)</b>是什么

    為什么無(wú)法使用esp-gdbstub調(diào)試esp8266?

    /應(yīng)用.輸出 (gdb) 設(shè)置遠(yuǎn)程硬件斷點(diǎn)限制 1 (gdb) 設(shè)置遠(yuǎn)程硬件觀察點(diǎn)限制 1 (gdb) 設(shè)置
    發(fā)表于 07-11 08:24

    PLC遠(yuǎn)程維護(hù)(遠(yuǎn)程編程調(diào)試遠(yuǎn)程上下載程序)平臺(tái)的功能

    。 數(shù)之能推出的PLC遠(yuǎn)程維護(hù)平臺(tái)將分布在全球各地的PLC設(shè)備連接在一起,打破了地理空間的限制。通過(guò)這個(gè)平臺(tái),工程師們可以隨時(shí)隨地監(jiān)控系統(tǒng)狀態(tài),進(jìn)行故障診斷,并實(shí)施必要的程序更新或修復(fù),如遠(yuǎn)程
    的頭像 發(fā)表于 05-24 16:07 ?407次閱讀
    PLC<b class='flag-5'>遠(yuǎn)程</b>維護(hù)(<b class='flag-5'>遠(yuǎn)程</b>編程<b class='flag-5'>調(diào)試</b>和<b class='flag-5'>遠(yuǎn)程</b>上下載程序)<b class='flag-5'>平臺(tái)</b>的功能

    PLC遠(yuǎn)程調(diào)試模塊是什么?PLC遠(yuǎn)程調(diào)試模塊的功能

    PLC(可編程邏輯控制器)遠(yuǎn)程調(diào)試模塊是一種設(shè)備或軟件功能,它允許工程師或技術(shù)人員在遠(yuǎn)離實(shí)際現(xiàn)場(chǎng)的情況下,通過(guò)網(wǎng)絡(luò)對(duì)PLC進(jìn)行編程、監(jiān)控、故障診斷和參數(shù)調(diào)整。這對(duì)于分布廣泛或難以直接接觸的工業(yè)
    的頭像 發(fā)表于 05-22 14:53 ?643次閱讀
    PLC<b class='flag-5'>遠(yuǎn)程</b><b class='flag-5'>調(diào)試</b>模塊是什么?PLC<b class='flag-5'>遠(yuǎn)程</b><b class='flag-5'>調(diào)試</b>模塊的功能

    使用VSCode調(diào)試嵌入式程序:如何切換gdb server

    上文小編給大家介紹了一下如何使用VSCode結(jié)合cortex-debug插件進(jìn)行調(diào)試的方法。本篇就趁熱打鐵,進(jìn)一步深入了解一下如何切換gdb server。讓我們可以不僅僅使用JLinkGDBServer進(jìn)行調(diào)試。
    的頭像 發(fā)表于 05-09 11:02 ?1770次閱讀
    使用VSCode<b class='flag-5'>調(diào)試</b>嵌入式程序:如何切換<b class='flag-5'>gdb</b> server

    在ELF 1開(kāi)發(fā)環(huán)境中使用Qt Creator進(jìn)行遠(yuǎn)程調(diào)試

    QtCreator是一款跨平臺(tái)集成開(kāi)發(fā)環(huán)境(IDE),主要適用于支持Qt框架的各類(lèi)應(yīng)用程序開(kāi)發(fā)。其內(nèi)置的遠(yuǎn)程調(diào)試機(jī)制使得開(kāi)發(fā)者能夠在本地開(kāi)發(fā)環(huán)境中對(duì)部署在遠(yuǎn)程設(shè)備上的代碼進(jìn)行
    的頭像 發(fā)表于 04-20 11:03 ?866次閱讀
    在ELF 1開(kāi)發(fā)環(huán)境中使用Qt Creator進(jìn)行<b class='flag-5'>遠(yuǎn)程</b><b class='flag-5'>調(diào)試</b>

    為什么VSCODE使用GDB調(diào)試不顯示寄存器?

    VSCODE使用GDB調(diào)試不顯示寄存器
    發(fā)表于 02-22 06:46

    arm三個(gè)寄存器在gdb調(diào)試時(shí)的作用

    arm三個(gè)寄存器在gdb調(diào)試時(shí)作用? ARM是一種廣泛使用的微處理器架構(gòu),它廣泛應(yīng)用于移動(dòng)設(shè)備、嵌入式系統(tǒng)和其他高性能計(jì)算設(shè)備。當(dāng)我們?cè)谑褂?b class='flag-5'>gdb
    的頭像 發(fā)表于 01-31 10:44 ?860次閱讀

    如何使用linux下gdb來(lái)調(diào)試python程序

    如何使用linux下gdb來(lái)調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來(lái)調(diào)試Python程序。
    的頭像 發(fā)表于 01-31 10:41 ?2371次閱讀

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦?

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦? 在Linux上使用GDB調(diào)試時(shí),遇到函數(shù)調(diào)用是一個(gè)常見(jiàn)的情況。函數(shù)調(diào)用可能涉及到多個(gè)函數(shù)、多個(gè)文件,這就需要我們仔細(xì)審查代碼,理解函數(shù)之間的
    的頭像 發(fā)表于 01-31 10:33 ?669次閱讀

    簡(jiǎn)述GDB調(diào)試器提供的基本功能

    GDB是一個(gè)功能強(qiáng)大的源代碼級(jí)調(diào)試工具,它提供了多種基本功能,幫助程序員** **更好地理解程序的運(yùn)行機(jī)制和定位問(wèn)題** **。
    的頭像 發(fā)表于 01-28 17:44 ?1201次閱讀

    TLT507-GDB程序調(diào)試方法說(shuō)明

    TLT507-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-26 10:11 ?923次閱讀
    TLT507-<b class='flag-5'>GDB</b>程序<b class='flag-5'>調(diào)試</b>方法說(shuō)明

    RK3568-GDB程序調(diào)試方法說(shuō)明

    RK3568-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-19 16:16 ?1691次閱讀
    RK3568-<b class='flag-5'>GDB</b>程序<b class='flag-5'>調(diào)試</b>方法說(shuō)明

    腳本調(diào)試工具有哪些?腳本調(diào)試工具怎么用?

    腳本調(diào)試是軟件開(kāi)發(fā)過(guò)程中非常重要的一環(huán),它能幫助開(kāi)發(fā)者快速定位并解決代碼中的錯(cuò)誤。大多數(shù)編程語(yǔ)言都提供了各種各樣的腳本調(diào)試工具,本文將介紹一些常見(jiàn)的腳本調(diào)試工具以及它們的基本使用方法。 GDB
    的頭像 發(fā)表于 12-01 14:40 ?796次閱讀