调试coredump文件的方法

转载自 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 ),然后能查到死在的函数和位置;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值