在调试里看NV驱动栈溢出导致的连环死锁

    最近我使用的一台PC随机出现应用程序卡死。卡死的程序可能是VirtualBox虚拟机,可能是资源管理器,也可能是其它软件。有时是一个程序卡死,有时是几个程序卡死,甚至是卡死一大片,整个系统不能动弹,只好触发蓝屏,或者强按4秒,关机重启。


三次挂死

    现在回想起来,第一次发生这个问题时,是在写一篇文章,正在收尾完工的时候,整个系统突然不能反应,屏幕全黑,但是老雷没有放弃,插了个USB键盘上去,过了一会,键盘居然有反应了(数字键盘锁定灯可以亮或者暗),于是老雷按下Ctrl + ScrollLock,触发蓝屏,虽然屏幕已经死了,没有显示,但是根据多年的经验,老雷感觉到了蓝屏是成功的,仿佛看到了那缕蓝光冲破黑暗,闪现出来......重启之后,真的发现有dump保存下来,说明老雷的感觉是对的。

    第二次发生这个问题是在北京讲课,讲着讲着老雷兴起,想做个即兴的演示给大家看,没想到在搜索要启动的程序时整个系统卡死,突然的事故让老雷有点措手不及,赶紧解释了一下,然后趁课间休息的时间重启系统。

    第三次发生是今天,一方面考虑到周五要做的公开课,另一方面考虑到,已经忍了两次,第三次不能忍了,是可忍孰不可忍:-)

    这一次挂死的是WinDBG,老雷唤起它是要做内核调试的,目标机冻结,熟悉的int 3出现,一切顺利,但是WinDBG的命令行始终处于BUSY状态。   

    通常这样的等待是因为WinDBG在找符号,老雷用这个间隙倒茶。

    但这一次,倒好茶还是BUSY,老雷意识到是“小鬼”出现了。

    

偷摸发信被卡牢

    再启动一个WinDBG,附加到已经挂死的WinDBG上,~* k,先是看到调试引擎线程卡在一个关键区上:

   1  Id: e24.2fb8 Suspend: 1 Teb: 00000063`3def0000 Unfrozen

 # Child-SP          RetAddr           Call Site

00 00000063`3e2ff278 00007fff`3f43be9b ntdll!NtWaitForAlertByThreadId+0x14

01 00000063`3e2ff280 00007fff`3f43bd01 ntdll!RtlpWaitOnAddressWithTimeout+0x43

02 00000063`3e2ff2b0 00007fff`3f414571 ntdll!RtlpWaitOnCriticalSection+0x1a1

03 00000063`3e2ff360 00007fff`3f414490 ntdll!RtlpEnterCriticalSectionContended+0xd1

04 00000063`3e2ff390 00007fff`28b92d69 ntdll!RtlEnterCriticalSection+0x40

05 00000063`3e2ff3c0 00007fff`28b97ade sqmapi!AcquireSessionFromHandle+0x21

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\wd10x64\dbgeng.dll - 

06 00000063`3e2ff3f0 00007fff`03849482 sqmapi!SqmAddToStreamString+0x82

07 00000063`3e2ff440 00007fff`038fcbf0 dbgeng!Ordinal327+0x23ce2

08 00000063`3e2ff490 00007fff`038304bb dbgeng!Ordinal327+0xd7450

09 00000063`3e2ff520 00007fff`038307a3 dbgeng!Ordinal327+0xad1b

0a 00000063`3e2ffa10 00007ff6`57094948 dbgeng!Ordinal327+0xb003

0b 00000063`3e2ffa70 00007ff6`57093b1b windbg+0x34948

0c 00000063`3e2ffab0 00007ff6`57095419 windbg+0x33b1b

0d 00000063`3e2ffae0 00007ff6`5707c0c4 windbg+0x35419

0e 00000063`3e2ffb10 00007fff`3eb52774 windbg+0x1c0c4

0f 00000063`3e2ffba0 00007fff`3f470d51 KERNEL32!BaseThreadInitThunk+0x14

10 00000063`3e2ffbd0 00000000`00000000 ntdll!RtlUserThreadStart+0x21

    观察这个管件区:

0:010> !locks


CritSec sqmapi!WPP_REGISTRATION_GUIDS+2298 at 00007fff28bc97

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值