调试我的程序时,程序会与调试器(Windows、Visual Studio、.NET)一起间歇性地挂起。发生这种情况时,似乎无法以任何方式获取进程的转储(尝试过命令行、进程资源管理器、任务管理器)。尝试转储也会被阻止。大概是因为转储进程类似于调试它,并且已经附加了调试器?
在 Visual Studio 中无法停止或分离调试器,它永远不会分离/停止。但是,通常可以使用 taskkill 终止调试的程序。
我猜想调试器/被调试程序中的某些程序在某些全局互斥锁或类似程序上发生死锁。但我如何才能找出死锁发生的位置?我想获取调试器和被调试程序的转储,以便查看所有线程的调用堆栈,但如何做呢?
答案1
你可以使用 usibg 查看线程正在做什么 进程探索器。
找到该进程,双击它进入“属性”,然后定位到“线程”选项卡。
您将看到线程正在做什么。单击一个线程并使用 Stack 按钮查看线程正在做什么。
要用这种方式分析程序,需要对 Windows 有相当好的了解。