windbg调试多线程异常

最近在大量把单线程功能改写成多线程,因为作死、弱智等原因,经常写出大量bug,其中调试遇到各种困难,在这里介绍一例未知原因崩溃的排错过程。

如图,在事件管理器中发现程序死于UnhandledException,且未记录抛出异常的代码行号。在毫无头绪的情况下只能在此祭出调试神器windbg。

用 !EEstack 打印所有线程堆栈,找到抛出异常的线程:43号。

用 !PrintException 打印线程中的异常。在一系列的异常套娃中找到抛出异常的地址 000007fe97c01745。

用 !IP2MD 找到方法名和方法地址 000007fe97c91810。!DumpIL 打印 IL 汇编,然而 IL 汇编并不能帮助找到实际的异常地址。

用 !U 打印实际汇编,通过内存地址找到 000007fe97c01745,发现是在 try catch 的 catch 产生的异常。

最后拿豆腐撞头。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注