delphi - 查找来自 csrss.exe 的应用程序错误

标签 delphi debugging application-error csrss

我是遗留 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/

相关文章:

delphi - 如何知道用户在 DBGrid 中选择了某行?

c# - DELPHI XE2 DLL无法添加到C#应用程序

delphi - 如何在运行时向 FireMonkey 的 TreeView 添加节点

c# - Application_Error 即使处理异常也会触发

delphi - 如何释放不属于表单的对象

visual-studio - 可以使用 Visual Studio 来调试 WinDBG 之类的子进程吗?

objective-c - Cocoa-Touch - 将文本文件加载到数组中

asp.net - 句柄 "potentially dangerous Request.Form value..."

c# - 如何在Application_Error()中知道请求是否在asp.net中是ajax

android 4.0 全屏