我是遗留 Delphi 应用程序的维护者。在运行此程序的计算机上,有时会出现应用程序错误
,并带有引用此 Delphi 应用程序的标题和如下所示的消息:
The instruction at "..." referenced memory at "...". The memory could not be "read".
Click on OK to terminate the program.
任务管理器显示属于此消息框的进程是 csrss.exe 。查找此错误根本原因的系统方法是什么?
问题是,这个Delphi程序相当复杂,错误信息出现的也比较少,所以我不能简单地单步执行代码并找到导致错误的部分。此外,该应用程序会自动运行,无需用户中断,因此我无法询问用户在消息出现时她做了什么。应用程序和系统日志没有表明任何问题。当消息框出现时,应用程序不会停止工作。
我希望有人以前遇到过这样的错误消息并能够解决问题。感谢您提前提供的帮助。
最佳答案
csrss
支持 Windows 控制台。我希望您的应用程序以控制台子系统为目标。
如果您无法让应用程序在调试器下失败,那么您需要向其添加一些诊断。我建议使用 madExcept 或 EurekaLog 等工具来执行此操作。我个人使用 madExcept 并且强烈推荐它。据我了解,EurekaLog也是一个不错的产品。
将这些工具之一与您的应用程序集成,下次出现故障时,它将生成详细的诊断报告。最重要的是,您将获得进程中每个线程的堆栈跟踪。错误线程的堆栈跟踪有望引导您找到程序错误的根本原因。
我的疑问是,如果故障发生在 csrss
中,那么在您的进程中包含诊断可能不会产生结果。您的应用程序可能已经出现故障,从而导致 csrss
中出现错误消息。在这种情况下,应用程序中的诊断会有所帮助。如果没有,那么您可能需要找到一种方法来使错误发生在您的流程中。
关于delphi - 查找来自 csrss.exe 的应用程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14828925/