借助process explorer调试一个线程意外死亡的bug

    本文记录我近期在项目中碰到的一个真实案例——“一个线程意外死亡的bug”的分析定位过程,借此展示我们在软件调试的过程中,除了使用调试器单步跟踪外,还可以借助一些外部观察工具来辅助,比如:process explorer。

一、案例描述

    近期一同事休假,扔下一堆代码项目给我维护。该项目有一个GUI窗口,窗口上有两个按键——btnA和btnB,分别控制两个工作线程thA和thB。其中,thB控制信号发出,thA控制信号接收。

    thA和thB设计为独立工作,thB发而thA收,GUI窗口上就可以看到信号图形。一般地操作是:先按btnB后按btnA,软件可以正常工作。从设计上来说,thA和thB是独立的,那么交换顺序——先按btnA再按btnB,应该也是可以看到信号图形的。

    这个bug的表现就是:交互btnA和btnB的点击顺序后,不能看到信号图形。


二、初步调试

    首先,我们通过第三方设备直接测量thB发出的信号(硬件信号测量),发现发出的信号是正常的,排除了thB的问题。那么,我就集中精力来调试thA部分的代码。

    thA是一个线程函数,里面维护了一个while循环,并通过一个flag来控制该循环,而这个flag由btnA控制。正常情况下,btnA启动后(按下),thA一直在进行这个while循环(扫描信号)。

    初步调试,我选择使用VS2012进行源码单步调试。

    在这个while循环的内外打了多个断点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值