<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    安裝GDB和GDBSERVER

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    安裝GDB和GDBSERVER

    轉自http://www.360doc.com/content/10/0407/17/155970_21971613.shtml

    把GDBSERVER裝入文件系統

    轉自http://www.arm9home.net/read.php?tid-1396.html


    在mini2440上使用GDB遠程調試 
    哈哈,一直都沒有發過有建設性的帖子,今次發個《在mini2440上使用GDB遠程調試》,下面的東西雖算不上絕對原創, 
    但是經過我試驗和總結的,用NFS作根文件系統配合GDB為我們的開發和學習提供了很大的便利,希望大家會喜歡!

     arm-linux-gdb 移植——PC端
    1. 到http://www.gnu.org/software/gdb下載gdb-6.6.tar.gz到/tmp目錄 
    2. 解壓到/opt目錄下 
    #cd /opt 
    #tar xzvf /tmp/gdb-6.6.tar.gz 
    3. 建立配置文件、編譯 
    gdb允許把編譯配置和編譯結果放到任意的目錄,因此可以在gdb目錄之外建立一個專門存放編譯結果的目錄。 
    #cd /opt 
    #mkdir -p arm-gdb/build 
    #cd arm-gdb/build 
    #/opt/gdb-6.6/configure --target=arm-linux --prefix=/opt/arm-gdb 
    #make 
    #make install 
    prefix指定了編譯結果的存放位置,也就是安裝目錄。 
    如果在編譯arm-linux-low.c這個文件時提示找不到“sys/reg.h”,則修改arm-linux-low.c,注釋掉#include "sys/reg.h"。 
    編譯完后可以在/opt/arm-gdb/bin目錄下找到可執行的arm-linux -gdb, arm-linux -gdbtui, arm-linux-run。 
    拷貝arm-linux-gdb 到/usr/bin目錄 
    #cd /opt/arm-gdb/bin/ 
    #cp arm-linux-gdb /usr/bin/

     

    錯誤:

    我使用的GCC版本是4.3.3,在編譯過程中報錯:

    /bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.././opcodes -I. -D_GNU_SOURCE -I. -I.././opcodes -I../bfd -I.././opcodes/../include -I.././opcodes/../bfd -I.././opcodes/../intl -I../intl   -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -c -o arm-dis.lo arm-dis.c
    gcc -DHAVE_CONFIG_H -I. -I.././opcodes -I. -D_GNU_SOURCE -I. -I.././opcodes -I../bfd -I.././opcodes/../include -I.././opcodes/../bfd -I.././opcodes/../intl -I../intl -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -c arm-dis.c -o arm-dis.o
    cc1: warnings being treated as errors
    arm-dis.c: In function 'print_insn_thumb16':
    arm-dis.c:2950: error: format not a string literal and no format arguments
    arm-dis.c:2957: error: format not a string literal and no format arguments
    arm-dis.c: In function 'print_insn_thumb32':
    arm-dis.c:3491: error: format not a string literal and no format arguments
    arm-dis.c:3499: error: format not a string literal and no format arguments
    make[4]: *** [arm-dis.lo] Error 1
    make[4]: Leaving directory `/opt/gdb-6.5/opcodes'
    make[3]: *** [all-recursive] Error 1
    make[3]: Leaving directory `/opt/gdb-6.5/opcodes'
    make[2]: *** [all] Error 2
    make[2]: Leaving directory `/opt/gdb-6.5/opcodes'
    make[1]: *** [all-opcodes] Error 2
    make[1]: Leaving directory `/opt/gdb-6.5'
    make: *** [all] Error 2

    這是源碼中有些函數定義不規范,用對函數格式非常嚴格的GCC 4.3編譯就會出錯,而GCC 4.1 不會報錯。

    自然不樂意重新安裝GCC退回到4.1的版本來解決這個問題,我是這樣做的。

    $cd /opt/gdb-6.5/opcodes

    進入編譯出錯的目錄;

    $/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.././opcodes -I. -D_GNU_SOURCE -I. -I.././opcodes -I../bfd -I.././opcodes/../include -I.././opcodes/../bfd -I.././opcodes/../intl -I../intl   -W -Wall -Wstrict-prototypes -Wmissing-prototypes -g -O2 -c -o arm-dis.lo arm-dis.c

    將編譯的命令拷貝,去掉“-Werror”,重新編譯,只有警告信息,沒有報錯誤。

    $cd ..

    推出子目錄

    $make

    繼續make

    4,make install


     gdbserver的移植——開發板端 
    gdbserver要用到gdb源碼目錄下的一些頭文件,因此無法在gdb源碼目錄之外編譯文件。 
    #cd /opt/gdb-6.6/gdb/gdbserver 
    #./configure --host=arm-linux --target=arm-linux --prefix=/opt/arm-gdb/gdbserver 
    #make 
    #make install 
    注意:此處target參數和host參數都要設置為arm-linux,因為gdbserver是放在目標板上運行的。 
    編譯后,可以在/opt/arm-gdb/gdbserver/bin目錄下找到arm-linux-gdbserver,下載該文件到目標板的/usr/bin目錄并重命名為gdbserver。 
    同時要下載gdbserver需要的庫文件libthread_db-x.x.so(在交叉編譯器的安裝目錄的lib子目錄下可以找到)到目錄板的/usr/lib目錄, 
    再建立兩個符號鏈接libthread_db.so和libthread_db.so.1。 
    在目標板上執行 
    #cd \usr\lib 
    #ln –s libthread_db-x.x.so libthread_db.so 
    #ln –s libthread_db-x.x.so libthread_db.so.1 
    5. 使用gdbserver 
    在目標板上運行gdbserver 
    在目標板上執行 
    #./gdbserver 192.168.0.2:2345 hello 
    其中192.168.0.2為目標板的IP。2345為gdbserver打開的端口,可以自己設置。 
    6. 運行gdb客戶端 
    #./arm-linux-gdb hello 
    (gdb)target remote 192.168.0.2:2345 
    (gdb) list 
    1 #include <stdio.h> 
    2 #include <fcntl.h> 

    4 int main() 
    5 { 
    6 printf("hello world \n"); 
    7 return 0; 
    8 } 
    (gdb)b main 
    (gdb)c 
    7. GDB的基本指令: 
    load:裝入一個程序 
    symbol-file:裝入符號庫文件,可以是用-g參數編譯的可執行文件。 
    f(ile):指定一個可執行文件進行調試,gdb將讀取些文件的調試訊息,如f a.exe 
    l(ist):列程序出源文件 
    r(un) :裝載完要調試的可執行文件后,可以用run命令運行可執行文件 
    b(reak):設置斷點(break point),如b 25,則在源程序的第25行設置一個斷點,當程序執行到第25行時,就會產生中斷;也可以使用b funcname,funcname為函數的名稱, 
    當程序調用些函數時,則產生中斷 
    c(ontinue):c命令可以另中斷的程序繼續執行,直到下一個中斷點或程序結束 
    p(rint):輸入某個變量的值,如程序定義了一個int aa的就是,p aa就會輸出aa的當前值 
    n(ext):程序執行到斷點時中斷執行,可以用n指令進行單步執行 
    s(tep):程序執行到斷點時中斷執行,可以用s指令進行單步執行進某一函數 
    q(uit):退出GDB

     

    我的gdbserver位于/sbin下,調試時要進入應用程序目錄下;arm-linux-gdb位于/usr/bin/下。

    調試步驟:

    1、gdbserver 172.16.17.50:2345 XXX     開發板端

    2、/usr/bin/arm-linux-gdb XXX PC端

    3 、 target remote 172.16.17.50:2345 PC端

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全