LINUX應用調試2:GDB調試應用程序

二、應用調試2:使用GDB來調試應用程序
編譯:
編譯gdb 運行於PC

tar xjf gdb-7.4.tar.bz2
cd gdb-7.4/
./configure --target=arm-linux
make
vi Makefile
     /prefix
          prefix = /usr/local
               mkdir tmp
               make install prefix=$PWD/tmp

把arm-linux-gdb複製到/bin目錄

sudo cp arm-linux-gdb /bin
sudo chmod +x /bin/arm-linux-gdb

編譯gdbserver 運行於ARM板
cd gdb/gdbserver/ ./configure --host=arm-linux host:表示應用程序編譯出來在哪裏執行
然後make
出現錯誤:

linux-arm-low.c:642: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)
linux-arm-low.c:642: error: (Each undeclared identifier is reported only once
linux-arm-low.c:642: error: for each function it appears in.)

缺少頭文件
解決方法:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin
cd /work/tools/gcc-3.4.5-glibc-2.3.6
grep "PTRACE_GETSIGINFO" * -nR
arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202
arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO   0x4202
distributed/arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO   0x4202
distributed/arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202

 cd -
/work/debug/gdb-7.4/gdb/gdbserverbook@book-desktop:/work/debug/gdb-7.4/gdb/gdbserver$ vi linux-arm-low.c   

添加#include <linux/ptrace.h>

cp gdbserver /work/nfs_root/first_fs/bin

編譯要調試的應用,編譯時加上-g選項

調試:

//192.168.1.104是ARM上的地址

1. 在ARM板上
gdbserver 192.168.1.104:2345 ./test_debug
出現如下:

/ # gdbserver 192.168.1.104:2345 ./test_debug
Process ./test_debug created; pid = 774
Listening on port 2345

2. 在PC上

/bin/arm-linux-gdb ./test_debug

輸入:target remote 192.168.1.104:2345
然後: 使用gdb命令來控制程序

另一種方法:
讓程序在開發板上直接運行,當它發生錯誤時,令它產生core dump文件
然後使用gdb根據core dump文件找到發生錯誤的地方
在ARM板上:

  1. ulimit -c unlimited
  2. 執行應用程序 : 程序出錯時會在當前目錄下生成名爲core的文件
    然後在28th_app_debug目錄下cp /work/nfs_root/first_fs/core .
/ # ulimit -c unlimited
/ # ./test_debug
a = 0x12
Segmentation fault (core dumped)

在PC上:
3. /bin/arm-linux-gdb ./test_debug ./core

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章