根据mips寄存器的用途迅速定位问题

在遇上一些偶尔才能出现的bug的时候, 根据寄存器的相关信息结合汇编语句, 可以迅速定位到问题, 提高debug的效率.

正好今天项目上报了一个bug, 死机的, 用这个方法很快定位到问题.


死机的一些打印:

#AP!# exception!
Coprocessor Unusable exception
EPC[ 0x80240760], CAUSE[0x1080002c], SR[0xff03], SP[0x80c0b558]!

showcs 80240760 80c0b558 80103510

 OSIntNesting=0 OSLockNesting=0



先看寄存器:

ra:[0x8010351]  epc[0x80240760]  fp:[0x80034e70]  gp:[0x80618b48]  at:[0xfffffffe]  
t9:[0x8001306]  t8:[0x00000008]  t7:[0x00000000]  t6:[0x00000005]  t5:[0x00000000]  
t4:[0x816baff]  t3:[0x00000000]  t2:[0x00000000]  t1:[0x80fbd330]  t0:[0x806f0000]  
s7:[0x8023f55]  s6:[0x80034ed0]  s5:[0x80c0c27c]  s4:[0x8111fdb0]  s3:[0x80c0be28]  
s2:[0x0000000]  s1:[0x80c0b6c4]  s0:[0x800341f0]  
a3:[0x80c0b4c]  a2:[0x000000fe]  a1:[0x80c0b588]  a0:[0x00000000]  
v1:[0x8024075]  v0:[0x000000fe] 

注意这边的a0寄存器.


相应的汇编:

80240758 <xxxx_func>:
80240758:    27bdffe8     addiu    sp,sp,-24
8024075c:    afbf0014     sw    ra,20(sp)
80240760:    90830204     lbu    v1,516(a0)  //这边有问题
80240764:    3c0280ab     lui    v0,0x80ab
80240768:    2442b778     addiu    v0,v0,-18568
8024076c:    00033180     sll    a2,v1,0x6
80240770:    00031900     sll    v1,v1,0x4


由于a0一般用来做参数传递, 所以检查这个函数的参数的定义.

  typedef struct
  {
    void *dir;
    tchar_t name[256];
    u8 use_logic; //正好是516的偏移
    u32 file_num;
  }xxx;


结合函数中的语句, 有p_dj->use_logic的操作, 因此这个死机是由于传递的这个参数是NULL导致的.

==============================下面是网上找的mips寄存器的介绍================================

表格来自 http://blog.sina.com.cn/s/blog_6cf6b58d0100lot7.html

;REGISTER

NAME

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值