中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中怎么使用gdb和gdbserver構建在線調試環境

發布時間:2021-08-05 17:56:30 來源:億速云 閱讀:276 作者:Leah 欄目:互聯網科技

這篇文章給大家介紹Linux中怎么使用gdb和gdbserver構建在線調試環境,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1.引言

單片機一般使用Jlink通過SWD或者JTAG接口直接在IDE中在線調試,Linux應用程序通常是加printf輸出log去調試,這種方式簡單,但是有些隱藏的程序bug只通過加打印信息不那么容易定位,這時可以通過類似單片機調試的gdb調試來實現,本篇為大家介紹linux環境下在線調試環境的搭建,希望對大家有所幫助。

GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.                                              

2.環境介紹

2.1.硬件

1) 網上的一個第三方做的NUC972開發板:

Linux中怎么使用gdb和gdbserver構建在線調試環境

有興趣購買的朋友,可以去他們的淘寶店購買:

https://s.click.taobao.com/X8mza8w

2.2.軟件

1) Uboot繼續使用之前文章用的,無須改動。

2) Kernel在上一篇基礎上,無須改動。

3) Rootfs在上一篇用Buildroot生成的基礎上,需要做一定的改動,用來生成gdbserver。

3.Buildroot配置

Buildroot里需要做一定的配置,用來生成gdb和gdbserver,步驟如下:

1) 確認Toolchain | Build cross gdb for the host 是否選中,這個默認是選中的。

Linux中怎么使用gdb和gdbserver構建在線調試環境

這個的作用是:Build a cross gdb that runs on the host machine and debugs programs running on the target. It requires 'gdbserver' installed on the target。

2) 選中Toolchain下的Thread library debugging,注意一定得先選中這個,不然第三步無法執行。

Linux中怎么使用gdb和gdbserver構建在線調試環境

3) 選中Target packages | Debugging, profiling and benchmark->gdb和gdbserver

Linux中怎么使用gdb和gdbserver構建在線調試環境

上面的作用是:

This option allows to build gdbserver and/or the gdb debugger for the target.For embedded development, the most common solution is to build only 'gdbserver' for the target, and use a cross-gdb on the host.

4) 保存,編譯即可。

生成的gdb位于:/home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/host/usr/bin

目錄中

生成的gdbserver位于:

/home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/target/usr/bin 目錄中

5) 將上述gdbserver直接放到板子的/usr/bin目錄里即可,然后登錄板子輸入gdbserver,可以看到如下信息,說明板子的gdbserver已經搭建好了。

Linux中怎么使用gdb和gdbserver構建在線調試環境

4.新建測試程序

1)新建一個測試程序gdbtest.c

#include <stdio.h>int main(){    char s[64] = "Welcome to www.topsemic.com";    int a = 1;    int c = a*2;    int *ptr = NULL;    printf("s is :%s ", s);    printf("c is : %d ", c);    *ptr = 20;    printf("%d ",*ptr);    return 0;}

2)交叉編譯

topsemic@topsemic-virtual-machine:~/nuc972/examples/gdbserver$ arm-linux-gcc gdbtest.c -o gdbtest -g

注:arm-linux-gcc gdbtest.c -o gdbtest -g其中”-g”參數表示進行 GDB 編譯。

這個程序放到板子里運行結果如下:

Linux中怎么使用gdb和gdbserver構建在線調試環境

我們用下面的在線調試方法去看看什么原因導致的Segmentation fault

5.在線調試

調試前,將板子和PC之間通過網線相連接,步驟如下:

1) 在開發板可執行程序所在的目錄下,執行如下命令啟動gdbserver:

Linux中怎么使用gdb和gdbserver構建在線調試環境

命令格式:gdbserver <Host_IP>:<Ports><Program><Arguments...>

192.168.0.80 為Ubuntu 的 IP 地址, 1234 為連接的端口號

注:需要先將虛擬機Ubuntu的IP配置為固定的192.168.0.80,這個設置方法在《Linux學習系列八:操作網口》中有介紹

Linux中怎么使用gdb和gdbserver構建在線調試環境

Linux中怎么使用gdb和gdbserver構建在線調試環境

2) 在Ubuntu下啟動gdb調試,命令格式:

<GDB 可執行程序路徑> <應用程序路徑>

topsemic@topsemic-virtual-machine:~/nuc972/examples/gdbserver$ /home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/host/usr/bin/arm-linux-gdb gdbtest

Linux中怎么使用gdb和gdbserver構建在線調試環境

3) 在彈出的上述對話框(gdb)后輸入以下命令,連接開發板

(gdb)target remote 192.168.0.100:1234

Linux中怎么使用gdb和gdbserver構建在線調試環境其中192.168.0.100 是開發板的IP地址

4)之后就可輸入如下 GDB 調試命令,其他調試命令的詳細用法請輸入”help 命令名稱”查閱。

命令:l,參看代碼。

命令:b main,在 main處設置斷點。

命令:b 6,在第六行設置斷點。

命令:c,繼續執行。

命令:n,單步執行。

命令:q,退出gdb。

一直輸入 c, 直到程序結束。

Linux中怎么使用gdb和gdbserver構建在線調試環境

Linux中怎么使用gdb和gdbserver構建在線調試環境

單步調試,同時查看板子上打印的信息

Linux中怎么使用gdb和gdbserver構建在線調試環境

可以看到板子程序執行的過程和Ubuntu上加的斷點運行的進度一致,另外可以

發現是因為line 10 導致的Segmentation fault,這樣就定位到了出問題的地方。

關于Linux中怎么使用gdb和gdbserver構建在線調試環境就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余姚市| 长春市| 鸡泽县| 阳朔县| 岫岩| 东乡族自治县| 文水县| 松阳县| 佛山市| 新竹县| 行唐县| 桦川县| 枝江市| 南宫市| 思南县| 辽阳市| 双柏县| 桐梓县| 甘德县| 中江县| 密云县| 突泉县| 万载县| 平度市| 大新县| 会同县| 南乐县| 铜陵市| 永和县| 城口县| 屏南县| 循化| 永清县| 手游| 汝南县| 高密市| 常宁市| 景东| 清丰县| 武宣县| 兰西县|