如何转储正在调试的挂起进程

如何转储正在调试的挂起进程

调试我的程序时,程序会与调试器(Windows、Visual Studio、.NET)一起间歇性地挂起。发生这种情况时,似乎无法以任何方式获取进程的转储(尝试过命令行、进程资源管理器、任务管理器)。尝试转储也会被阻止。大概是因为转储进程类似于调试它,并且已经附加了调试器?

在 Visual Studio 中无法停止或分离调试器,它永远不会分离/停止。但是,通常可以使用 taskkill 终止调试的程序。

我猜想调试器/被调试程序中的某些程序在某些全局互斥锁或类似程序上发生死锁。但我如何才能找出死锁发生的位置?我想获取调试器和被调试程序的转储,以便查看所有线程的调用堆栈,但如何做呢?

答案1

你可以使用 usibg 查看线程正在做什么 进程探索器

找到该进程,双击它进入“属性”,然后定位到“线程”选项卡。

您将看到线程正在做什么。单击一个线程并使用 Stack 按钮查看线程正在做什么。

要用这种方式分析程序,需要对 Windows 有相当好的了解。

相关内容