RCP 调查HotKey bug 经历

  没想到连博客园的账号密码都忘了,登陆一看,上一篇随笔是一年前的事了。一年前仿佛在昨天!

今天想记录调查RCP HotKey问题的经历,主要是记录调查过程和调查方法,希望以后能提高效率不再走弯路。

同事在网上找到一篇帖子实现了HotKey代码。结果调试后发现系统并没有调用自己实现的热键响应函数。于是来帮忙。

对于这个问题我头脑中第一反应是某些地方语法写错了,比如说某个字母大小写的问题,或者类似定义后没有regist。

这样怀疑的理由是在xml文件和代码中都增加了内容。代码中调用时需要与xml中的ID对上。仔细检查了每个字母没有发现问题,说明不是敲错了。

(其实遇到这种问题上边的第一反应是对的,只是接下来走了弯路浪费了时间。)

于是迷茫的我这时开始想尽一切办法想知道为什么系统没有调用响应热键的回调函数。

由于程序中有一个热键好使,于是我在好使的热键响应函数中打了断点。走到断点后看了一下调用堆栈,在堆栈中能打断点的地方都打了断点。

然后对堆栈截图。接着让断点走完。这时再按下不好使的热键(Eclipse有一个好处就是可以在系统实现的代码中打断点调试),走到第一个断点后与截图比对,发现一致,接着F8走到下一断点,就这样一个一个的走,应该不会完全一致。果然走完Command开头的文件中断点后出现了不同。IHandle的baseEnable属性为false,而好使的热键代码走到这里时是true。接下来查找为什么为false。发现不是IHandle的问题,而是CommandID根本不是我在xml中定义的ID,而是系统的CommandID。那么在哪里取得的系统CommandID呢?开始往前面的堆栈找,发现有个以Parameter开头的文件中取得的CommandID就是系统热键的CommandID。

于是将这个消息告诉了写这个热键代码的同事,他检查代码后,发现原因是程序中有两个view,写代码的同事将热键注册到了另一个view上。。。(听到这个消息后,感觉一道闪电击中了我。。。隐约中闻到了糊味!)

没想到会发生这么简单的错误。感觉我像是拿大炮打了蚊子。之所以这么说,是因为自创的这个调查方法像是个大炮,很慢,适用于慢慢解决诡异的问题。

吃一堑长一智。下次应该将所有可能的快速检验的方法都试过后,再开始使用大炮。毕竟时间才是是真正的奢侈品。

不知道为什么我现在突然想起了n年前的一个电影讲述的是"一个馒头引发的血案"。

 

转载于:https://www.cnblogs.com/JerryloveAda/p/5389378.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值