除錯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 ),然後能查到死在的函式和位置;