我在 Visual Studio 中使用 Windows 窗体制作了一个工具,可以从长文本文件中搜索不同的关键字(线性搜索)。单击过滤器按钮后,它会随机冻结(说没有响应)。如果我在重新启动后尝试执行完全相同的步骤,它将正常工作。
我如何跟踪问题?断点无济于事,因为程序很大,我不知道应该把它们放在哪里。
此外,如果您让它保持冻结一段时间,它确实可以成功运行,然后在同一点再次开始冻结。
我在 Visual Studio 中使用 Windows 窗体制作了一个工具,可以从长文本文件中搜索不同的关键字(线性搜索)。单击过滤器按钮后,它会随机冻结(说没有响应)。如果我在重新启动后尝试执行完全相同的步骤,它将正常工作。
我如何跟踪问题?断点无济于事,因为程序很大,我不知道应该把它们放在哪里。
此外,如果您让它保持冻结一段时间,它确实可以成功运行,然后在同一点再次开始冻结。
连接一个性能分析器(如果它发生在几分钟内,perfmon 就可以工作)并观察一些重要的值,例如:
如果这些都没有指向任何明显的问题(例如大对象堆碎片或泄漏引用),那么您也可以在 Visual Studio 中暂停应用程序。例如,使用 Visual Studio 的 Run 按钮运行应用程序,然后当您的应用程序显示 时not responding
,您可以按下 Visual Studio 的 Pause 按钮并打开线程窗口并了解导致问题的原因以及 UI 时正在运行的内容线程被阻塞了很长时间,以至于 Window 说它“没有响应”
当应用程序停止响应时,使用日志文件(或单独线程上的 UI 元素,具体取决于应用程序的类型)向您自己指示您正在处理文件的位置。重复运行应用程序并寻找与应用程序停止位置相关的模式。
在您收集了一些基本数据之后,您可以开始向您的日志中添加似乎与您所看到的模式相关的信息。写出诸如正在消耗多少内存等信息,以尝试缩小导致崩溃的特定模式。
日志文件是一种尝试获取有关应用程序状态、运行时状态以及崩溃发生时所采取的操作的信息的方法。