gdb除錯嵌入式裝置的core檔案
- 除錯嵌入式裝置時,產生了一個段錯誤,查資料後明白瞭如何使用gdb除錯該段錯誤的基本方法,記錄一下,免得以後遇見,又忘記怎麼操作,有錯誤之處望聯絡指出
1、生成core
檔案
由於該嵌入式裝置本身不支援
gdb
,所以還是生成core
檔案,拿到虛擬機器中進行除錯
- 使用以下命令生成
core
檔案ulimit -c ulimit -c unlimited echo "/opt/core.%e.%t" > /proc/sys/kernel/core_pattern cat /proc/sys/kernel/core_pattern
①如果
ulimit -c
命令列印得出的是0
,則表示不支援生成core
檔案,然後需要使用ulimit -c unlimited
命令;
②/proc/sys/kernel/core_pattern
檔案是生成的core
檔案所放的位置,可以使用cat /proc/sys/kernel/core_pattern
命令檢視。也可以自定義core
檔案生成的位置,比如使用命令echo "/opt/core.%e.%t" > /proc/sys/kernel/core_pattern
,將生成的core
檔案儲存到/opt
目錄,並命令為core.%e.%t
:%e
指執行的程式或程式,%t
指生成隨機數
2、除錯core
檔案
-
1、將生成的
core
檔案移動到虛擬機器中,可以將該嵌入式裝置檔案系統掛載到虛擬機器中,參考NFS掛載嵌入式裝置檔案系統。還需要將產生段錯誤時,所執行的可執行程式一起復制到虛擬機器中,另外還需要將所執行的可執行程式所依賴的所有庫全部複製到虛擬機器中,並且保持庫在攝像頭時,所在目錄的位置,即保證路徑要相同 -
2、使用以下命令開始除錯
./mips-linux-gnu-gdb ipcam core.ipcam.2398
①
mips-linux-gnu-gdb
是我的攝像頭平臺所支援的gdb
,如果嵌入式裝置的系統不支援使用gdb
,需要自行安裝嵌入式裝置平臺所支援的gdb
②ipcam
是我產生段錯誤時,所執行的程式;
③core.ipcam.2398
是生成的core
檔案;
④這三個檔案都是在用一個目錄,所以可以直接執行,如果沒有在同一個目錄,需要使用絕對目錄或者相對目錄。 -
3、檢視所依賴庫是否正確載入
info sharedlibrary
如果已找到對應的庫則其
From
和To
會有值,syms Read
的值為yes
,並且右邊路徑顯示的就是庫在虛擬機器中所在的位置。如果未找到對應的庫則From
和To
為空,syms Read
的值為No
-
4、設定程式
ipcam
的依賴庫的位置這裡設定依賴庫的位置有點繞:假設
ipcam
有兩個依賴庫,分別為libcrypto.so.1.0.0
和libssl.so.1.0.0
,並且這兩個庫在攝像頭時,其所在位置分別為/app/lib/libcrypto.so.1.0.0
和/lib/libssl.so.1.0.0
①如果使用命令set sysroot /opt
,如果設定位置/opt
,那麼libcrypto.so.1.0.0
和libssl.so.1.0.0
在虛擬機器的位置則必須分別為/opt/app/lib/libcrypto.so.1.0.0
和/opt/lib/libssl.so.1.0.0
,沒有的目錄需要自行建立;
②如果使用命令set sysroot /
,設定位置/
,那麼libcrypto.so.1.0.0
和libssl.so.1.0.0
在虛擬機器的位置則必須分別為/app/lib/libcrypto.so.1.0.0
和/lib/libssl.so.1.0.0
,沒有的目錄需要自行建立;
③其他目錄設定類似 -
5、設定依賴庫的位置後,再使用
info sharedlibrary
命令即可看的出來。然後使用bt
命令,即可列印出產生段錯誤的函式,函式呼叫是從下往上。
相關文章
- gdb除錯core dump檔案之二除錯
- gdb除錯coredump檔案除錯
- gdb除錯命令小結_與多檔案除錯_遠端除錯除錯
- 給核心裝置驅動增加sysfs除錯檔案除錯
- gdb除錯除錯
- GDB除錯MySQL除錯MySql
- gdb除錯命令除錯
- GDB除錯指令除錯
- 在Ubuntu上除錯ARMv7的core檔案Ubuntu除錯
- GDB 除錯程式碼除錯
- gdb除錯多程式除錯
- GDB除錯彙總除錯
- 用GDB除錯程式除錯
- GDB多程式除錯除錯
- gdb除錯快速上手除錯
- gdb除錯多程序除錯
- gdb除錯總結除錯
- 嵌入式除錯:wiggler+ocdremote+gdb insight除錯REM
- 在Linux下產生並除錯core檔案Linux除錯
- 介紹 GDB 除錯 Go除錯Go
- GDB除錯命令詳解除錯
- C語言——gdb除錯C語言除錯
- 用GDB除錯程式(六)除錯
- GDB除錯使用記錄除錯
- Codeblocks和gdb除錯BloC除錯
- linux 下GDB除錯Linux除錯
- gdb高階除錯方法高階除錯
- 使用 gdb 工具除錯 Go除錯Go
- gdb高階除錯命令高階除錯
- gdb除錯正在執行的程式除錯
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- C編譯: 使用gdb除錯編譯除錯
- Linux核心使用gdb除錯Linux除錯
- C 編譯: 使用 gdb 除錯編譯除錯
- GDB程式碼除錯與使用除錯
- 使用 GDB 除錯多程式程式除錯
- 使用gdb編譯除錯mysql編譯除錯MySql
- 用GDB除錯程式(二) (轉)除錯