转载自 http://blog.csdn.net/zxy_cs/article/details/7025856
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 ),然后能查到死在的函数和位置;