在Ubuntu上除錯ARMv7的core檔案

绍荣發表於2024-07-10

1 在Ubuntu上除錯ARMv7的core檔案

1.1 預備

  1. uname -a: 獲得目前嵌入式系統

     Linux (none) 3.8.11-xilinx #40 SMP PREEMPT Thu Jan 12 17:02:11 CST 2023 armv7l GNU/Linux
    
  2. 安裝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/

  3. 獲取ARMv7上的系統庫檔案

    分別有/lib/usr/lib

    • /lib: 包含基本系統程式使用的共享庫檔案,例如: C庫, 核心模組等
    • /usr/lib: 包含使用者級應用程式使用的庫檔案

    並將該庫存放到當前ubuntu下的/opt/下,如/opt/arm_lib/opt/arm_usr_lib

  4. 將Arm下執行的可執行檔案所依賴的庫,存放到指定位置,如/opt/arcs/librarys/

    gdb-multiarch除錯時,需要使用set solib-search-path來設定所引用庫的全部檔案;

1.2 直接在非ARM的主機上除錯ARM下生成的core檔案

  1. sudo gdb-mulitarch ./ARCS ./core
  2. 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/
  3. (gdb) set sysroot /opt/armv7_sys_libs: 設定root目錄,之後就會開始載入
  4. bt: 檢視堆疊資訊
  5. i sharedlibrary: 檢視哪些動態庫有符號檔案;
  6. f num: 切換堆疊層;
  7. l: 檢視相關程式碼;

相關文章