解决来自csrss.exe的应用程序错误

kol*_*kol 3 delphi debugging application-error csrss

我是传统Delphi应用程序的维护者.在运行此程序的计算机上,Application Error有时会出现标题引用此Delphi应用程序以及如下消息:

"......"处的指令引用"......"处的存储器.内存无法"读取".

单击"确定"以终止该程序.

任务管理器说属于此消息框的进程是csrss.exe.这将是一个系统化的方法来发现这个错误的根本原因?

问题是,这个Delphi程序相当复杂,并且错误消息相对较少出现,因此我不能简单地单步执行代码并找到导致错误的部分.此外,应用程序会自动运行,无需用户中断,因此我无法询问用户当消息出现时她做了什么.应用程序和系统日志不表示任何问题.当消息框存在时,应用程序不会停止工作.

我希望有人之前遇到过这样的错误信息,并且能够解决问题.提前谢谢你的帮助.

Dav*_*nan 7

csrss支持Windows控制台.我希望您的应用程序以控制台子系统为目标.

如果您无法在调试器下使应用程序失败,则需要为其添加一些诊断程序.我建议使用像madExcept或EurekaLog这样的工具来做到这一点.我个人使用madExcept并且不能足够推荐它.据我所知,EurekaLog也是一款优质产品.

将这些工具中的一个与您的应用程序集成,下次出现故障时,将生成详细的诊断报告.最重要的是,您将获得流程中每个线程的堆栈跟踪.错误线程的堆栈跟踪应该会引导您找到程序错误的根本原因.

我怀疑的是,如果故障发生在csrss那时包括你的过程中的诊断可能不会结果.您的应用程序已经出现故障,这反过来会导致出现错误消息,这似乎是合理的csrss.在这种情况下,应用程序中的诊断将有所帮助 如果没有,那么您可能需要找到一种方法来在您的过程中发生故障.

  • 在发布版本中关闭?!为什么要这么做?!这正是你需要的时候.我可能每月修复一个漏洞纯粹来自客户提供的ME错误报告.那东西就像金尘. (3认同)

Lie*_*ers 6

除了David的建议之外,我还建议使用sysinternals中的procdump监视进程,并在发生未处理的异常时编写转储文件.

您可以使用Windbg等来离线分析转储文件.虽然一开始可能看起来过于镶嵌,但我坚信通过使用Windbg来加快速度可以获得很多好处.

介绍

ProcDump是一个命令行实用程序,其主要用途是监视应用程序的CPU峰值并在峰值期间生成故障转储,管理员或开发人员可以使用它来确定峰值的原因.ProcDump还包括挂起窗口监视(使用Windows和任务管理器使用的窗口挂起的相同定义),未处理的异常监视,并可以根据系统性能计数器的值生成转储.

启动进程,然后监视异常:

   C:\>procdump -e 1 -f "" -x c:\dumps consume.exe
Run Code Online (Sandbox Code Playgroud)