如果我的程序崩溃,我想在某处存储一些信息以进行调试。在下一次开始时,我会阅读此信息。我可以在注册表或文件系统中执行此操作,但这不是很快。我可以使用共享内存和第二个进程,但我想避免一直运行第二个程序。
我想知道是否有更快的方法。如果程序崩溃,是否有任何快速且不会丢失的 Windows 机制(管道、共享内存等)?
您可以考虑使用应用程序事件日志:(此处为 C# 代码,但您也可以不受管理地执行)
字符串 cs = "MyAppEvents"; if (!EventLog.SourceExists(cs)) EventLog.CreateEventSource(cs, "Application"); EventLog.WriteEntry(cs, message, EventLogEntryType.Error);
写在那里的事件被发送到服务,这可能足够快。事件日志服务的架构在这里解释:http: //oreilly.com/catalog/winlog/chapter/ch02.html (它很旧,但没有太大变化)
编辑:自 NT4 时代以来,它发生了变化 :) 从来没有版本的 windows (>2000 - NT5) 有一个更有效的功能,称为事件跟踪。你可以在这里阅读更多关于它的信息http://msdn.microsoft.com/en-us/magazine/cc163437.aspx
一个合理的实现应该在你的进程和服务之间使用一个命名管道,在同一台机器上使用共享内存映射(事实上,你可以在 Windows 系统中找到一个名为“eventlog”的命名管道)