以模态形式查找正在进行的无限循环?

Find infinite loop in progress in a modal form?

有时我的应用程序开始消耗最大值 CPU 并且 GUI 变得无响应。也许 1/50 的重现尝试成功了。

基于 CPU 的高使用率,它显然是 运行(未被外部阻止)但我不确定如何在调试器中识别执行的位置。

这个问题的场景是这样的:

这是我要调试的最后一个事件。

我遵循了 Find infinite loop in progress? 中的建议,但是当我进入调试器时,它就落在了这一行:

return f.ShowDialog();

我不确定为什么调试器认为这是当前执行行。我没有创建任何线程。

有什么方法可以在模式 window 的上下文中调试这种情况?

感谢发表评论的人,事实证明这是成功的方法。或者至少,它为这个问题提供了一些有价值的启示:

  • 运行 app直到出现问题

  • 运行 Process Explorer 并找到应用程序的进程

  • 打开该进程的属性 window

  • 查看 运行 的线程并确定哪个线程正在使用所有 CPU。

  • 查看该线程的堆栈跟踪

在我的例子中,我可以看到在堆栈跟踪中几乎所有时间都花在 wpfgfx_v0400.dll 的函数内部,主要是在函数 Utility_PolygonBoundsUtility_PathGeometryBounds 中。

我还在任何与 WPF 相关的代码/代码隐藏中设置了无数个断点,其中 none 个断点被命中。所以它似乎真的被困在那个图书馆里了。我已经针对该问题发布了一个单独的问题:App frozen inside wpfgfx_v0400.dll Utility_PolygonBounds and Utility_PathGeometryBounds?