1. 程式人生 > >除錯coredump檔案的方法

除錯coredump檔案的方法

1: 將Coredump.gz放置Supernova路徑下,執行gunzip解壓 Coredump.gz為Coredump

2:在build server上模擬板子上的環境,執行mips-linux-gnu-gdb   projects/ui/nebula/china/bin.a1/china_board

(紅色部分可根據project做選擇)

3:在gdb的debug環境下指向所模擬的路徑, 與所有so lib路徑

=> set solib-search-path  target/china.a1/mslib

4:core Coredump

5:=> bt      (back trace)

=> info thread (看thread info)

=> thread number (切換thread)

6: q可以退出gdb模式

二、直接DEBUG 方式一;

(1)epc:2b988088, ra:2b98a99c

epc為具體死在的地方。

     ra為呼叫到的部分。

(2)從dump maps on pid裡面找尋epc或ra死在那個.so裡面。

-----------------------------------------------------------

* dump maps on pid (390)

-----------------------------------------------------------

00400000-0044f000 r-xp 00000000 00:0c 1555 /applications/home/bin/home_board

0045f000-00461000 rw-p 0004f000 00:0c 1555 /applications/home/bin/home_board

00461000-00496000 rwxp 00461000 00:0c 1555 

2aaa8000-2aac7000 r-xp 00000000 00:09 154 /lib/ld-2.8.so

2aac7000-2aad6000 rw-p 2aac7000 00:09 154 

2aad6000-2aad7000 r--p 0001e000 00:09 154 /lib/ld-2.8.so

...

2b986000-2b98d000 r-xp 00000000 00:0b 109 /vendor/lib/utopia/libapiPNL.so//epc:2b988088符合這個區間,所以是這個lib: libapiPNL.so

....

紅色地址為此libapiPNL.so載入在memory的地址,因此可以用epc - 2b986000 可得實際宕機的symbol的地址。

(3)用colinux的gdb開啟死的.so(需要進入libapiPNL.so這個檔案所在的資料夾,或者你可以把這個檔案copy到你當前的目錄)

例如:bash-3.2# mips-linux-gnu-gdb  libapiPNL.so

(4)開啟後,用epc - 2b986000 = 0x2088 = 8328

再在colinux下輸入:

(gdb) info symbol 8328 或者(gdb)b *0x2088

就可以得到宕機的函式地方了:

MDrv_PNL_SetSSC_Fmodulation + 24 in section .text//這個就是死在的函式和位置

三、直接DEBUG 方式二(與上面不一樣的地方在於步驟3、4);

(1)epc:2b988088, ra:2b98a99c

epc為具體死在的地方。

     ra為呼叫到的部分。

(2)從dump maps on pid裡面找尋epc或ra死在那個.so裡面。

-----------------------------------------------------------

* dump maps on pid (390)

-----------------------------------------------------------

00400000-0044f000 r-xp 00000000 00:0c 1555 /applications/home/bin/home_board

0045f000-00461000 rw-p 0004f000 00:0c 1555 /applications/home/bin/home_board

00461000-00496000 rwxp 00461000 00:0c 1555 

2aaa8000-2aac7000 r-xp 00000000 00:09 154 /lib/ld-2.8.so

2aac7000-2aad6000 rw-p 2aac7000 00:09 154 

2aad6000-2aad7000 r--p 0001e000 00:09 154 /lib/ld-2.8.so

...

2b986000-2b98d000 r-xp 00000000 00:0b 109 /vendor/lib/utopia/libapiPNL.so//epc:2b988088符合這個區間,所以是這個lib

....

紅色地址為此libapiPNL.so載入在memory的地址,因此可以用epc - 2b986000 可得實際宕機的symbol的地址。

(3)呼叫GDB開啟這個lib檔案,(需要進入libapiPNL.so這個檔案所在的資料夾,或者你可以把這個檔案copy出來到你當前的目錄)

mips-linux-gnu-objdump -Sx libapiPNL.so > obj.log

(4)用UE開啟生產的obj.log 檔案,搜尋死在的位置(epc - 2b986000 = 0x2088 ),然後能查到死在的函式和位置;