问题背景:
某天忽闻测试那出现一个问题,程序在运行19分钟之后程序突然崩溃,很奇怪的是,当时我和其他的同事电脑上都没出现这种问题,好的是,在测试的电脑上可以稳定复现,于是便开始了排查。
排查过程:
刚开始由于可以稳定复现(不得不说可以稳定复现的问题是真好),就用windbg抓了个dump文件,拿回来加载上pdb之后,!analyze -v自动分析之后
并没有显示出崩溃的代码位置,
用dd和.exr想看看崩溃附近的代码,但是一直报Cannot read Exception record @ f685d68b,也不知道为什么,有人知道的话也可以在评论区告知我一下,
但是这并不是最后解决问题关键
后面用!locks等命令查看锁线程等都没找到异常的地方
没办法只能在网上找啊找,看到一篇博文上写着这个命令
~*er?$t1=((ntdll!_NT_TIB*)@$teb)->StackLimit;r?$t2=((ntdll!_NT_TIB*)@$teb)->StackBase;!teb;dps@$t1@$t2
试了一下,终于找到点蛛丝马迹
最后一行输出的,像是运行某个线程崩溃,看到ucrtbase想到,在测试的电脑上能出现但是在其他同事的电脑上不会出现,是不是测试的电脑的电脑上没有安装VS环境,导致和我们的电脑里的ucrtbase.dll不一样导致的,把我的电脑VS下的ucrtbase.dll拷贝到测试电脑里程序运行目录下,果然,没问题了,完结撒花。