1 在Ubuntu上除錯ARMv7的core檔案
1.1 預備
-
uname -a
: 獲得目前嵌入式系統Linux (none) 3.8.11-xilinx #40 SMP PREEMPT Thu Jan 12 17:02:11 CST 2023 armv7l GNU/Linux
-
安裝armv7的交叉編譯工具鏈:
sudo apt-get udpate sudo apt-get install gcc-arm-linux-gnueabihf gdb-multiarch
gcc-arm-linux-gnueabihf
: 用於編譯ARMv7架構程式的交叉編譯器;gdb-multiarch
: 支援多種架構的GDB版本,可以用來除錯ARMv7程式;
安裝
gcc-arm-linux-gnueabihf
之後,相關的檔案在如下目錄中:/usr/local/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/
將ARMv7下的可執行檔案和core dump檔案複製到如上資料夾下
若如上資料夾下沒有
arm-linux-gnueabihf-gdb
檔案,可以使用gdb-multiarch
替代.為方便gdb除錯時使用
set solib-search-path
設定庫檔案,建議將可執行檔案所需要引用的庫檔案也一同放在如上目錄下而將對應的ARMv7的系統庫檔案可以放在
/opt/armv7/
下 -
獲取ARMv7上的系統庫檔案
分別有
/lib
和/usr/lib
/lib
: 包含基本系統程式使用的共享庫檔案,例如: C庫, 核心模組等/usr/lib
: 包含使用者級應用程式使用的庫檔案
並將該庫存放到當前ubuntu下的
/opt/下
,如/opt/arm_lib
和/opt/arm_usr_lib
-
將Arm下執行的可執行檔案所依賴的庫,存放到指定位置,如
/opt/arcs/librarys/
當
gdb-multiarch
除錯時,需要使用set solib-search-path
來設定所引用庫的全部檔案;
1.2 直接在非ARM的主機上除錯ARM下生成的core檔案
sudo gdb-mulitarch ./ARCS ./core
set solib-search-path /opt/arm_lib/:/opt/arm_usr_libs/:Libraries/:Libraries/log4cpp/:Libraries/sqlite/
: 設定so的庫檔案搜尋路徑, 注意這裡的Libraries/:Libraries/log4cpp/:Libraries/sqlite/
這三個資料夾是當前可執行檔案所需要使用的庫檔案,且都存放在/usr/local/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/
下(gdb) set sysroot /opt/armv7_sys_libs
: 設定root目錄,之後就會開始載入bt
: 檢視堆疊資訊i sharedlibrary
: 檢視哪些動態庫有符號檔案;f num
: 切換堆疊層;l
: 檢視相關程式碼;