BUG经历

来源:互联网 发布:域名别名解析 编辑:程序博客网 时间:2024/04/30 09:28

                           不同路径还原法

 

最近项目要求将公司原有采集推流工具将核心功能封装成dll,供第三方程序调用。Dll提供后第三方程序调用dll后释放偶尔会有崩溃问题。单步调试却没有发生任何问题,但是有个特殊现象引起我的注意。当进入主dll什么都不做直接关闭退出没有任何问题,按推流按钮调用推流接口,之后再停止推流,此时在关闭程序,程序必回崩溃。由此现象我初步断定是由于主程序已经退出,我的dll内部有游离线程没有退出,导致资源没有释放完毕导致的。为了验证自己的推测,在进入主程序后先看看各个线程运行状态如下:

 

 

按推流按钮,推流一段时间后结束推流。此时程序应该恢复到程序刚进入是的状态。在看测试程序的线程运行状态如下:

 

 

发现此时多了个TimeTickRtmp::TickThread线程。我去程序中去跟踪该线程果然退出该线程没有去显示的关闭回收资源。添加显示关闭该线程代码后果然第三方调用退出后不再崩溃,问题游刃而解。

      从代码不同的路径进入相同逻辑状态,包括调用其它功能,再回来该逻辑状态。查看不同路径到这里时程序内存、线程、资源有何不同进而定位bug所在

 

0 0
原创粉丝点击