Win32:存储调试信息以应对崩溃

时间:2013-01-24 11:07:04

标签: windows debugging

如果我的程序崩溃,我想在某处存储一些信息用于调试目的。在下一次开始,我会阅读这些信息。我可以在注册表或文件系统中执行此操作,但这不是很快。我可以使用共享内存和第二个进程,但我想避免一直运行第二个程序。

我想知道是否有更快的方法。是否有任何Windows机制(管道,共享内存,等等)快速,如果程序崩溃,不会丢失?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用应用程序事件日志: (C#代码在这里,但你也可以不受管理)

string 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

了解更多相关信息

合理的实现应该在进程中的advapi32和服务之间使用命名管道,这些服务在同一台机器上使用共享内存映射(事实上,在其他服务器中可以找到一个名为“eventlog”的命名管道。 windows系统)