linux 远程调试文件夹,GDB远程调试开发板程序
一、概述
可能我們都熟悉直接在發(fā)行版linux系統(tǒng)下調(diào)試系統(tǒng),只需要在安裝系統(tǒng)的時候包含了調(diào)試工具,直接可以根據(jù)gdb進行調(diào)試。但對于很多做嵌入式的來說,可能經(jīng)常需要調(diào)試運行在開發(fā)板上的應(yīng)用程序,下面就來說說。
先說一下我們的調(diào)試原理:首席會在開發(fā)板上運行一個gdbserver,通過gdbserver接收develop機器的命令,然后通過gdbserver控制開發(fā)板的程序運行。gdbserver就相當于開發(fā)板應(yīng)用程序和develop機器之間的橋梁,一方面從develop機器上接收命令控制開發(fā)板的應(yīng)用程序;另一方面,會向開發(fā)板報告程序的運行情況,如各種變量的值,方面開發(fā)人員調(diào)試和觀察(這不就是我們調(diào)試的目的嘛)。在develop上要裝有arm-none-linux-gnueabi-gdb(不一定是這個名字,是屬于交叉編譯工具鏈中的gdb,不是發(fā)行版linux自帶的),用它在develop上啟動應(yīng)用程序,并和開發(fā)板聯(lián)機,通過在develop上輸入命令來調(diào)試開發(fā)板上運行的程序。
二、安裝工具:arm-none-linux-gnueabi-和gdbserver
交叉編譯器的名字是arm-none-linux-gnueabi-gcc(根據(jù)你自己的交叉編譯工具,有的可能是arm-linux-gcc),下面會用到
1.?從下載gdb,解壓,進到相關(guān)目錄
2. 編譯GDB
#cd gdb-7.2
#./configure --target=arm-none-linux-gnueabi --prefix=/usr/local/arm-gdb ? // 上面提到的交叉編譯器,就是用在這里,因為我們target上運行
// 的應(yīng)用程序是用它編譯出來的
#make
#make install ? ? ? ? ? //生成在/usr/local/arm-gdb/bin下
把bin下面生成的arm-none-linux-gnueabi-gdb拷貝到交叉編譯鏈目錄中或修改環(huán)境變量把它的路徑加進去,這樣我們可以直接用這個命令
3.編譯GDB Server
#cd ./gdb/gdbserver ? ? ? // 即是目錄gdb-7.2/gdb/gdbserver
#./configure --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi
#make CC=arm-none-linux-gnueabi-gcc ? ? //編譯用于目標機的stub程序 ?生成gdbserver是GDB客戶端程序,在板子上運行。
之后在~/gdb/gdbserver文件夾下生成可執(zhí)行文件gdbserver
然后將gdbserver拷貝到板子上的某個bin目錄下即可。
三、調(diào)試步驟
201.123.116.65:5678代表開發(fā)板的ip是201.123.116.65,5678是任意給的端口
1.在開發(fā)板上:
[root@ATP2400 test-drv]# gdbserver 201.123.116.65:5678 test
Process server created; pid = 907
Listening on port 5678
注意:編譯的test程序必須加了調(diào)試信息,即編譯時加上“-g”
2.在develop上:
[root@ATP2400 test-drv]# arm-none-linux-gnueabi-gdb test
進入到gdb,然后
(gdb) set solib-absolute-prefix /nfsdir/atp2400/mini-rootfs-pgy-1808
(gdb) set solib-search-path /nfsdir/atp2400/mini-rootfs-pgy-1808/lib
(gdb) target remote 201.123.116.65:5678
Remote debugging using 201.123.116.65:5678
warning: Can not parse XML target description; XML support was disabled at compile time
Reading symbols from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3...(no debugging symbols found)...done.
Loaded symbols for /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3
0xb6fda7b0 in _start () from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3
解讀:上面在gdb下面的操作如果直接執(zhí)行target remote 201.123.116.65:5678系統(tǒng)會抱怨
說庫不匹配,因為啟動的gdb是arm-none-linux-gnueabi-gdb,是屬于運行開發(fā)板程序的gdb,
所以需要用到的動態(tài)鏈接庫也應(yīng)該是arm的,而不是本地庫,本地庫是支持X86的。前兩句就是
設(shè)置動態(tài)鏈接庫的路徑的,/nfsdir/atp2400/mini-rootfs-pgy-1808/是我做的開發(fā)板文件系統(tǒng)
的源文件
3.然后就可以直接進行調(diào)試了
(gdb) b main
Breakpoint 1 at 0x8698: file server.c, line 19.
(gdb) l
5#include
6#include
7#include
8
9#define SOCKET_PORT 7000
10#define BUF_SIZE 512
11int main(int argc, char *argv[])
12{
13int fd;
14struct sockaddr_in svraddr;
(gdb) c
Continuing.
Breakpoint 1, main (argc=1, argv=0xbefffe94) at server.c:19
19int n = 0;
(gdb)
由現(xiàn)象可以看到在通過develop調(diào)試開發(fā)板的應(yīng)用程序時,開發(fā)板是不接受任何命令的,用串口終端進行輸入會沒有任何反應(yīng),
只有develop下的gdb退出后,開發(fā)板才可以正常接收命令
關(guān)于gdb調(diào)試命令,請網(wǎng)上查閱。
總結(jié)
以上是生活随笔為你收集整理的linux 远程调试文件夹,GDB远程调试开发板程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017云栖大会门票转让_「揭秘GP」云
- 下一篇: 中3d库后接负载_Nature子刊:近红