以模态形式查找正在进行的无限循环?
Find infinite loop in progress in a modal form?
有时我的应用程序开始消耗最大值 CPU 并且 GUI 变得无响应。也许 1/50 的重现尝试成功了。
基于 CPU 的高使用率,它显然是 运行(未被外部阻止)但我不确定如何在调试器中识别执行的位置。
这个问题的场景是这样的:
- 应用启动
- 用户导致新模式window打开
- 用户在此 window 工作了一段时间
- 最终 window "freezes"(有时)
这是我要调试的最后一个事件。
我遵循了 Find infinite loop in progress? 中的建议,但是当我进入调试器时,它就落在了这一行:
return f.ShowDialog();
我不确定为什么调试器认为这是当前执行行。我没有创建任何线程。
有什么方法可以在模式 window 的上下文中调试这种情况?
感谢发表评论的人,事实证明这是成功的方法。或者至少,它为这个问题提供了一些有价值的启示:
运行 app直到出现问题
运行 Process Explorer 并找到应用程序的进程
打开该进程的属性 window
查看 运行 的线程并确定哪个线程正在使用所有 CPU。
查看该线程的堆栈跟踪
在我的例子中,我可以看到在堆栈跟踪中几乎所有时间都花在 wpfgfx_v0400.dll
的函数内部,主要是在函数 Utility_PolygonBounds
或 Utility_PathGeometryBounds
中。
我还在任何与 WPF 相关的代码/代码隐藏中设置了无数个断点,其中 none 个断点被命中。所以它似乎真的被困在那个图书馆里了。我已经针对该问题发布了一个单独的问题:App frozen inside wpfgfx_v0400.dll Utility_PolygonBounds and Utility_PathGeometryBounds?
有时我的应用程序开始消耗最大值 CPU 并且 GUI 变得无响应。也许 1/50 的重现尝试成功了。
基于 CPU 的高使用率,它显然是 运行(未被外部阻止)但我不确定如何在调试器中识别执行的位置。
这个问题的场景是这样的:
- 应用启动
- 用户导致新模式window打开
- 用户在此 window 工作了一段时间
- 最终 window "freezes"(有时)
这是我要调试的最后一个事件。
我遵循了 Find infinite loop in progress? 中的建议,但是当我进入调试器时,它就落在了这一行:
return f.ShowDialog();
我不确定为什么调试器认为这是当前执行行。我没有创建任何线程。
有什么方法可以在模式 window 的上下文中调试这种情况?
感谢发表评论的人,事实证明这是成功的方法。或者至少,它为这个问题提供了一些有价值的启示:
运行 app直到出现问题
运行 Process Explorer 并找到应用程序的进程
打开该进程的属性 window
查看 运行 的线程并确定哪个线程正在使用所有 CPU。
查看该线程的堆栈跟踪
在我的例子中,我可以看到在堆栈跟踪中几乎所有时间都花在 wpfgfx_v0400.dll
的函数内部,主要是在函数 Utility_PolygonBounds
或 Utility_PathGeometryBounds
中。
我还在任何与 WPF 相关的代码/代码隐藏中设置了无数个断点,其中 none 个断点被命中。所以它似乎真的被困在那个图书馆里了。我已经针对该问题发布了一个单独的问题:App frozen inside wpfgfx_v0400.dll Utility_PolygonBounds and Utility_PathGeometryBounds?