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.
它的工作原理是:在主機Ubuntu下運行gdb,在嵌入式板子上運行gdbserver,這樣就可以在線調試了。
2.環境介紹
2.1.硬件
1) 網上的一個第三方做的NUC972開發板:
有興趣購買的朋友,可以去他們的淘寶店購買
2.2.軟件
1) Uboot繼續使用之前文章用的,無須改動。
2) Kernel在上一篇基礎上,無須改動。
3) Rootfs在上一篇用Buildroot生成的基礎上,需要做一定的改動,用來生成gdbserver。
3.Buildroot配置
Buildroot里需要做一定的配置,用來生成gdb和gdbserver,步驟如下:
1) 確認Toolchain | Build cross gdb for the host 是否選中,這個默認是選中的。
這個的作用是: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,注意一定得先選中這個,不然第三步無法執行。
3) 選中Target packages | Debugging, profiling and benchmark->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已經搭建好了。
4.新建測試程序
1)新建一個測試程序gdbtest.c
#includeint 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 編譯。
這個程序放到板子里運行結果如下:
我們用下面的在線調試方法去看看什么原因導致的Segmentation fault
5.在線調試
調試前,將板子和PC之間通過網線相連接,步驟如下:
1) 在開發板可執行程序所在的目錄下,執行如下命令啟動gdbserver:
命令格式:gdbserver
192.168.0.80 為Ubuntu 的 IP 地址, 1234 為連接的端口號
注:需要先將虛擬機Ubuntu的IP配置為固定的192.168.0.80,這個設置方法在《Linux學習系列八:操作網口》中有介紹
2) 在Ubuntu下啟動gdb調試,命令格式:
topsemic@topsemic-virtual-machine:~/nuc972/examples/gdbserver$ /home/topsemic/nuc972/buildroot/NUC970_Buildroot/output/host/usr/bin/arm-linux-gdb gdbtest
3) 在彈出的上述對話框(gdb)后輸入以下命令,連接開發板
(gdb)target remote 192.168.0.100:1234
其中192.168.0.100 是開發板的IP地址
4)之后就可輸入如下 GDB 調試命令,其他調試命令的詳細用法請輸入”help 命令名稱”查閱。
命令:l,參看代碼。
命令:b main,在 main處設置斷點。
命令:b 6,在第六行設置斷點。
命令:c,繼續執行。
命令:n,單步執行。
命令:q,退出gdb。
一直輸入 c, 直到程序結束。
單步調試,同時查看板子上打印的信息
可以看到板子程序執行的過程和Ubuntu上加的斷點運行的進度一致,另外可以
發現是因為line 10 導致的Segmentation fault,這樣就定位到了出問題的地方。
注:https://man.linuxde.net/gdb 可以看到詳細的gdb命令用法。
編輯:hfy
-
單片機
+關注
關注
6044文章
44628瀏覽量
639016 -
Linux
+關注
關注
87文章
11351瀏覽量
210520 -
Ubuntu
+關注
關注
5文章
567瀏覽量
30070
發布評論請先 登錄
相關推薦
如何搭建企業AI開發環境
【MM32F5270】Keil開發環境搭建
![【MM32F5270】Keil開發<b class='flag-5'>環境</b><b class='flag-5'>搭建</b>](https://file.elecfans.com/web2/M00/7D/13/poYBAGN82HSASWKdAAAlb23yJds612.png)
Linux環境變量配置方法
TI RF Transceiver EVM自動化環境搭建方法
![TI RF Transceiver EVM自動化<b class='flag-5'>環境</b><b class='flag-5'>搭建</b>方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MCUXpresso IDE下在線聯合調試雙核MCU工程的三種方法
![MCUXpresso IDE<b class='flag-5'>下在線</b>聯合<b class='flag-5'>調試</b>雙核MCU工程的三種方法](https://file1.elecfans.com/web2/M00/01/47/wKgZoma0cXeABzT3AAA1KoC8H4g757.png)
pytorch環境搭建詳細步驟
PyTorch深度學習開發環境搭建指南
環境在線監測系統解決方案
請問Eclipse環境如何搭建IoT Solution?
虛擬機的Linux下搭建環境,執行到‘設置工具’的時候總是報錯,怎么處理?
在ELF 1開發環境中使用Qt Creator進行遠程調試
![在ELF 1開發<b class='flag-5'>環境</b>中使用Qt Creator進行遠程<b class='flag-5'>調試</b>](https://file1.elecfans.com/web2/M00/D1/87/wKgZomYjMEqAHQH4AAA-A3hXNtk520.png)
評論