小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

DAVINCI調(diào)試ARM端應(yīng)用程序

 rookie 2012-03-10

拿到DM365的開發(fā)板好幾天了,各種環(huán)境也都搭建成功了,Demo程序也跑起來了?,F(xiàn)在就想如何來調(diào)試應(yīng)用程序。在開始之前心里其實(shí)就明白,Linux下是不可能有Windows下那么好用的IDE工具的。所以首先想到使用gdb,然后再去找找有沒有稍微人性化一點(diǎn)的IDE工具。下面就是我的調(diào)試過程。

        


1.         建立源文件(hello.c

host # gedit hello.c

輸入:

#include <stdio.h>

int main (int argc, char **argv)

{

         int x, y;

       x = 20, y = 10;

       printf("%d+%d=%d/n", x, y, x+y);

       printf("%d*%d=%d/n", x, y, x*y);

       printf("%d/%d=%d/n", x, y, x/y);

       return 0;

}

        


2.         查看是否已安裝ARM-CROSSGDB工具

host # arm_v5t_le-gdb

bash: arm_v5t_le-gdb: command not found

錯(cuò)誤:命令找不到。說明沒有供交叉編譯的GDB工具。

        


3.         安裝GDB工具

下載最新的gdb安裝包:ftp.gnu.org/gnu/gdb

這里我下載了最新的gdb-7.1.tar.gz

         安裝過程參見:

http://processors.wiki./index.php/Debugging_a_Linux_Application_with_MontaVista_5.0

         這里講的很清楚,下面只記錄安裝命令:

         host # cp gdb-7.1.tar.gz /home/debug/tmp

host # tar zxvf gdb-7.1.tar.gz

host # cd gdb-7.1

host # ./configure --host=i686-pc-linux-gnu --target=armv5tl-montavista-linux-gnueabi --prefix=/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le

host # make && make install

安裝完成,在/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin目錄下生成3個(gè)文件:

armv5tl-montavista-linux-gnueabi-gdb

armv5tl-montavista-linux-gnueabi-gdbtui

armv5tl-montavista-linux-gnueabi-run

 


4.         安裝GDB-Server

host # cd /gdb-7.1/gdb/gdbserver  (注:gdbservergdb-7.1.tar.gz解壓出來的包里面)

host # CC=arm_v5t_le-gcc ./configure  --host=armv5tl-montavista-linux-gnueabi --prefix=/home/debug

host # make && make install

安裝完成,在指定目錄(/home/debug)生成一個(gè)bin目錄,目錄下就有gdbserver

 


5.         編譯源文件(hello.c

host # arm_v5t_le-gcc -g hello.c -o hello         (注意加上-g選項(xiàng))

編譯結(jié)束后,即可生成一個(gè)帶debug信息的可執(zhí)行文件hello

 


6.         下載可執(zhí)行文件(hello)到目標(biāo)板

因?yàn)檫@里沒有使用NFS,所以需手動(dòng)下載到目標(biāo)板上,可通過tftp下載。

注:主機(jī)IP地址:192.168.1.109;目標(biāo)板IP地址:192.168.1.144

host # cp hello /tftpboot

target# cd /opt/test

target# tftp -g -r hello 192.168.1.109

target# chmod 755 hello

         在目標(biāo)板的 /opt/test目錄下得到hello可執(zhí)行文件,并修改其權(quán)限,否則沒有運(yùn)行權(quán)限。

        


7.         調(diào)試可執(zhí)行文件(hello

首先在目標(biāo)板上運(yùn)行gdbserver,如下:

target# gdbserver 192.168.1.109:4567 ./hello

Process ./sample created; pid = 658

Listening on port 4567

接下來,目標(biāo)板一直處于監(jiān)聽狀態(tài)。

注:以上命令中gdbserver后面跟的是主機(jī)的IP地址,以及兩者的通信端口。

        

         然后在主機(jī)上運(yùn)行gdb,如下:

host# armv5tl-montavista-linux-gnueabi-gdb ./hello

         打印出gdb版本等相關(guān)信息。

         注:因?yàn)樵谥暗沫h(huán)境配置中,已經(jīng)把/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin添加到PATH中,所以可以直接運(yùn)行armv5tl-montavista-linux-gnueabi-gdb。

         接下來就進(jìn)入gdb調(diào)試環(huán)境了,首先就要連接目標(biāo)板的gdbserver,如下:

(gdb) target remote 192.168.1.144:4567

         注:端口號(hào)要和目標(biāo)板創(chuàng)建gdbserver時(shí)的端口號(hào)一致。

         在繼續(xù)gdb調(diào)試之前,可以先看一下目標(biāo)板的響應(yīng)情況:

Remote debugging from host 192.168.1.109

         說明兩者已經(jīng)成功連接了。

        

         接下來,就是普通的gdb調(diào)試了:

         (gdb) l main

         (gdb) b 6

         Breakpoint 1 at 0x8468: file helloworld.c, line 6.

         (gdb) r

The "remote" target does not support "run".  Try "help target" or "continue".

         這里提示說,遠(yuǎn)程的目標(biāo)不支持run,請(qǐng)?jiān)?/span>continue,具體為什么我也不清楚,可能程序已經(jīng)開始運(yùn)行了,既然說可以continue那就先試一下。

         (gdb) c

Continuing.

warning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.

warning: .dynamic section for "/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?)

Error while mapping shared library sections:

/lib/ld-linux.so.3: 沒有那個(gè)文件或目錄.

Breakpoint 1, main (argc=1, argv=0xbead3e64) at helloworld.c:6

6               printf("%d+%d=%d/n", x, y, x+y);

         中間有一些警告和錯(cuò)誤,但是還是可以繼續(xù)運(yùn)行的,具體這個(gè)錯(cuò)誤以后再說。

         單步:

         (gdb) n

         查看目標(biāo)板響應(yīng):

         20+10=30

         驚喜,說明程序成功往下走了一步。

         。。。

         把剩余的代碼運(yùn)行完:

(gdb) c

Continuing.

 

Program exited normally.

同時(shí),查看目標(biāo)板響應(yīng):

20*10=200

20/10=2

 

Child exited with retcode = 0

 

Child exited with status 0

GDBserver exiting

        

一次調(diào)試差不多也就完成了。

        


8.         使用DDD工具

雖然使用GDB可以調(diào)試程序,畢竟還是很不好用的。除了實(shí)在沒有辦法的情況下,總希望有一款好用的IED工具來代替它。下面先介紹一下自帶的DDD工具的使用方法。

目標(biāo)板操作相同,啟動(dòng)gdbserver

target# gdbserver 192.168.1.109:4567 ./hello

主機(jī)端使用如下命令:

ddd -debugger armv5tl-montavista-linux-gnueabi-gdb ./hello

此時(shí),就會(huì)啟動(dòng)DDD工具,如圖8-1所示。

 

8-1 DDD界面

         一看就不是很好用,但畢竟是個(gè)圖形化調(diào)試工具。

         整個(gè)界面和一般的IDE界面類似,有菜單欄,工具欄,源代碼區(qū),懸浮的按鈕窗口,以及最下面的命令窗口。

         在運(yùn)行之前,你必須在命令窗口連接gdbserver,在閃爍的光標(biāo)處輸入:

         target remote 192.168.1.144:4567

接下來的操作差不多一看就明白了。如:

在源代碼區(qū)點(diǎn)擊某一行,然后點(diǎn)擊工具欄上的Break圖標(biāo),即會(huì)創(chuàng)建一個(gè)斷點(diǎn)。

在懸浮的按鈕窗口中,點(diǎn)擊Step、Next、Cont等等,來完成程序的執(zhí)行。

 

感受:經(jīng)常會(huì)出現(xiàn)找不到鼠標(biāo),不知道其他人是不是這樣,只能關(guān)閉再打開。而且命令窗口中不能復(fù)制粘貼。四個(gè)字:勉強(qiáng)能用。

        


9.         使用insight工具

我也是網(wǎng)上看來,說insightddd好用,所以就嘗試一下。

下載地址:ftp://sourceware.org/pub/insight/releases

下載最新版本:insight-6.8-1.tar.bz2

解壓安裝如下:

host# mv insight-6.8-1.tar.bz2 /home/debug/tmp

host# chmod 755 insight-6.8-1.tar.bz2

host# tar xjf insight-6.8-1.tar.bz2

host# cd insight-6.8-1

host# ./configure --host=i686-pc-linux-gnu --target=armv5tl-montavista-linux-gnueabi --prefix=/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le

host# make && make install

安裝完成,在/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin目錄下會(huì)生成一個(gè)可執(zhí)行文件:

armv5tl-montavista-linux-gnueabi-insight

        

         因?yàn)槁窂?/span>/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin已經(jīng)在之前的環(huán)境設(shè)置中添加了,所以這里可以直接運(yùn)行該路徑的可執(zhí)行文件,如下:

         host# armv5tl-montavista-linux-gnueabi-insight

         一運(yùn)行,insight圖形界面就出來了,如圖9-1所示。

        

         9-1 insight界面

         給人第一印象,貌似比DDD精致一點(diǎn),具體性能怎么樣,用了再說。

        

下面仍然使用上面的hello程序來驗(yàn)證一下insight的功能。

目標(biāo)板操作相同:

target# gdbserver 192.168.1.109:4567 ./hello

         主機(jī)操作如下:

host# armv5tl-montavista-linux-gnueabi-insight ./helloworld

出現(xiàn)如圖9-2所示的insight界面,在代碼區(qū)的最前面一列,我們可以看到“-”標(biāo)記,這表明當(dāng)前行代碼是有效的,用鼠標(biāo)單擊“-”標(biāo)記,就會(huì)出現(xiàn)紅色的標(biāo)記(如圖9-2中的第6行前面),這就是斷點(diǎn)了,設(shè)置非常方便,再次點(diǎn)擊就會(huì)刪除斷點(diǎn)。

        

         9-2 insight打開可執(zhí)行文件的顯示(紅色標(biāo)記為斷點(diǎn))

        

第一步工作仍然是連接目標(biāo)板(gdbserver),打開菜單欄的FileàTarget Settings…

         出現(xiàn)如圖9-3所示的窗口。

 

        

         9-3 Target Settings窗口

         如圖9-3設(shè)置:

         Target           GDBServer/TCP

         Hostname    192.168.1.144

         Port               1000

         注:我想修改端口號(hào)為4567的,但是Port后面的編輯框卻不接受輸入。我現(xiàn)在Linux主機(jī)是運(yùn)行在虛擬機(jī)VMWare6.52版本)上的,重啟Linux后還是不能輸入,不知道為什么。

         這里不能修改端口號(hào),那么只能修改目標(biāo)板了(無奈),如下:

target# gdbserver 192.168.1.109:1000 ./hello

         主機(jī)端打開insight,并設(shè)置Target Settings如圖9-3所示。然后點(diǎn)擊圖標(biāo),或者打開菜單欄的RunàRun,開始運(yùn)行,跳出對(duì)話框如圖9-4所示。

 

9-4 Run時(shí)出現(xiàn)的警告

同時(shí),目標(biāo)板顯示:

Remote debugging from host 192.168.1.109

 

此時(shí),若點(diǎn)擊Yes按鈕,則主機(jī)端顯示:

段錯(cuò)誤

目標(biāo)板顯示:

readchar: Got EOF

Remote side has terminated connection.  GDBserver will reopen the connection.

Listening on port 1000

若點(diǎn)擊No按鈕,則主機(jī)端顯示如圖9-5所示:

 

9-5 Run警告點(diǎn)擊No跳出的對(duì)話框

此時(shí),點(diǎn)擊OK按鈕即可。Insight界面如圖9-6所示。

 

9-6 Run之后的insight界面

首先,工具欄中的調(diào)試工具都亮起來了,而且在源代碼的main開始第一句代碼處高亮顯示。此時(shí)你可以使用這幾個(gè)按鈕進(jìn)行調(diào)試了。調(diào)試結(jié)果和上面相同。

 

另外,還有一些查看工具,點(diǎn)擊按鈕,查看寄存器,如圖9-7所示。

 

9-7 查看寄存器

點(diǎn)擊按鈕,查看內(nèi)存,如圖9-8所示。

 

9-8 查看內(nèi)存

點(diǎn)擊按鈕,查看堆棧,如圖9-9所示。

 

9-9 查看堆棧

點(diǎn)擊按鈕,查看表達(dá)式,如圖9-10所示。

 

9-10 查看表達(dá)式

點(diǎn)擊按鈕,查看當(dāng)前變量,如圖9-11所示。

 

9-11 查看當(dāng)前變量

點(diǎn)擊按鈕,查看斷點(diǎn)設(shè)置情況,如圖9-12所示。

 

9-12 查看斷點(diǎn)設(shè)置情況

 

感受:比較好用。唯一的缺陷就是不能接受鍵盤輸入(我不知道別人的是不是這樣),如果這存在這樣的bug,那這個(gè)軟件也基本上是廢了。

問題解決:

網(wǎng)上搜索了一陣,很多人在問這個(gè)問題,但是卻沒有給出一個(gè)明確的答復(fù)。大概是說TCL/tk庫和現(xiàn)有的輸入法有沖突造成的。

試著關(guān)閉SCIM輸入法(右鍵點(diǎn)擊Linux右下角的SCIM輸入法,選擇退出)。

哈哈,問題解決,這下insight基本上是一個(gè)完美的gdb調(diào)試前端了,吼吼。

如果你想使用SCIM輸入法,只需在終端輸入:

host# scim -d

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多