一次令人不悦的调试经历
上周五到昨天,前后花了七八个小时在找一个app打开后即挂掉(最小化到任务栏,点不出来)的原因。
现象让人略觉迷茫:
初始化完了就挂,但挂不到代码中,单步跟踪十分困难
自动断点,定位在atlthunk.dll中,该dll无任何相关信息,网上也几乎没有相关内容,说明极少有与之相关的问题出现。
鉴于现象如此,怀疑是多线程问题导致,于是注意力转移到了定时器上,因为另一个下载线程十分简单,也没有改变相关代码,出问题概率非常低。
然而,跟踪、禁掉定时器之后仍然没有进展,看不到问题原因,也看不到问题位置。
这样只好从开始初始化之后就开始跟踪,一步一步,观察代码,意外发现一个union中的变量都进行了初始化,报了异常
改为只初始化一个结果没有仍何改善。
继续跟进,意外又来了,一个智能指针被两次赋值,但都是同样的值,讲道理赋同样的值不会改变什么东西,为什么会挂了呢,但禁掉重复赋值之后,问题果然解决了,想过来,这个指针是智能指针,也许是赋值过程中,指针被析构了。
然而造成两次赋值的原因,却是同事签入代码之后出现的,也许还有很大的砍在等着我去经历,因为看着目前的状态,情绪成熟,我还是远算不上的
一个聪明的人,应该在问题出现时快速定位,并制定出解决方案,并迅速执行下去。
抛却情绪带来的影响,全凭信仰的指导思想和理智去做事。