乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      DAVINCI調試ARM端應用程序

       rookie 2012-03-10

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

              


      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

      錯誤:命令找不到。說明沒有供交叉編譯的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個文件:

      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)生成一個bin目錄,目錄下就有gdbserver

       


      5.         編譯源文件(hello.c

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

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

       


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

      因為這里沒有使用NFS,所以需手動下載到目標板上,可通過tftp下載。

      注:主機IP地址:192.168.1.109;目標板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

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

              


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

      首先在目標板上運行gdbserver,如下:

      target# gdbserver 192.168.1.109:4567 ./hello

      Process ./sample created; pid = 658

      Listening on port 4567

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

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

              

               然后在主機上運行gdb,如下:

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

               打印出gdb版本等相關信息。

               注:因為在之前的環(huán)境配置中,已經(jīng)把/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin添加到PATH中,所以可以直接運行armv5tl-montavista-linux-gnueabi-gdb

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

      (gdb) target remote 192.168.1.144:4567

               注:端口號要和目標板創(chuàng)建gdbserver時的端口號一致。

               在繼續(xù)gdb調試之前,可以先看一下目標板的響應情況:

      Remote debugging from host 192.168.1.109

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

              

               接下來,就是普通的gdb調試了:

               (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".

               這里提示說,遠程的目標不支持run,請試continue,具體為什么我也不清楚,可能程序已經(jīng)開始運行了,既然說可以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: 沒有那個文件或目錄.

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

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

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

               單步:

               (gdb) n

               查看目標板響應:

               20+10=30

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

               。。。

               把剩余的代碼運行完:

      (gdb) c

      Continuing.

       

      Program exited normally.

      同時,查看目標板響應:

      20*10=200

      20/10=2

       

      Child exited with retcode = 0

       

      Child exited with status 0

      GDBserver exiting

              

      一次調試差不多也就完成了。

              


      8.         使用DDD工具

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

      目標板操作相同,啟動gdbserver

      target# gdbserver 192.168.1.109:4567 ./hello

      主機端使用如下命令:

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

      此時,就會啟動DDD工具,如圖8-1所示。

       

      8-1 DDD界面

               一看就不是很好用,但畢竟是個圖形化調試工具。

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

               在運行之前,你必須在命令窗口連接gdbserver,在閃爍的光標處輸入:

               target remote 192.168.1.144:4567

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

      在源代碼區(qū)點擊某一行,然后點擊工具欄上的Break圖標,即會創(chuàng)建一個斷點。

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

       

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

              


      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目錄下會生成一個可執(zhí)行文件:

      armv5tl-montavista-linux-gnueabi-insight

              

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

               host# armv5tl-montavista-linux-gnueabi-insight

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

              

               9-1 insight界面

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

              

      下面仍然使用上面的hello程序來驗證一下insight的功能。

      目標板操作相同:

      target# gdbserver 192.168.1.109:4567 ./hello

               主機操作如下:

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

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

              

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

              

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

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

       

              

               9-3 Target Settings窗口

               如圖9-3設置:

               Target           GDBServer/TCP

               Hostname    192.168.1.144

               Port               1000

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

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

      target# gdbserver 192.168.1.109:1000 ./hello

               主機端打開insight,并設置Target Settings如圖9-3所示。然后點擊圖標,或者打開菜單欄的RunàRun,開始運行,跳出對話框如圖9-4所示。

       

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

      同時,目標板顯示:

      Remote debugging from host 192.168.1.109

       

      此時,若點擊Yes按鈕,則主機端顯示:

      段錯誤

      目標板顯示:

      readchar: Got EOF

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

      Listening on port 1000

      若點擊No按鈕,則主機端顯示如圖9-5所示:

       

      9-5 Run警告點擊No跳出的對話框

      此時,點擊OK按鈕即可。Insight界面如圖9-6所示。

       

      9-6 Run之后的insight界面

      首先,工具欄中的調試工具都亮起來了,而且在源代碼的main開始第一句代碼處高亮顯示。此時你可以使用這幾個按鈕進行調試了。調試結果和上面相同。

       

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

       

      9-7 查看寄存器

      點擊按鈕,查看內存,如圖9-8所示。

       

      9-8 查看內存

      點擊按鈕,查看堆棧,如圖9-9所示。

       

      9-9 查看堆棧

      點擊按鈕,查看表達式,如圖9-10所示。

       

      9-10 查看表達式

      點擊按鈕,查看當前變量,如圖9-11所示。

       

      9-11 查看當前變量

      點擊按鈕,查看斷點設置情況,如圖9-12所示。

       

      9-12 查看斷點設置情況

       

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

      問題解決:

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

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

      哈哈,問題解決,這下insight基本上是一個完美的gdb調試前端了,吼吼。

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

      host# scim -d

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多