2011-02-16 66 views
3

有没有人有任何建议或教程来创建程序的崩溃报告?我想开始发送一个我一直在开发给人们的游戏,但是如果游戏因错误处理而崩溃,我希望将这些报告发送到我已注册的电子邮件地址(以及从该程序收集的数据)。有谁知道如何做到这一点?创建并发送崩溃报告

+3

到目前为止,您还没有接受过很多答案。是什么让我觉得我这次能够满足你? – 2011-02-17 00:00:59

+2

我的努力工作:搜索“SetUnhandledExceptionFilter”。在SO覆盖得很好。 – 2011-02-17 00:13:05

+1

David Heffernan,许多回应都不是主题,而是偏离了我所要求的。 – jack 2011-02-17 00:29:39

回答

3

执行崩溃报告最直接的方法是在代码中使用try-catch语句。发生异常时,创建一个临时日志文件,其中包括发生崩溃的异常类型,源代码类,函数和行以及全局和本地变量/容器的数据,其中一些应包含用户输入。

您不通过电子邮件发送错误日志,但您的程序会打开一个端口并将数据发送到服务器,该服务器会持续侦听预定义的端口以获取错误报告。

更高级的错误报告可以包括内存转储和寄存器的值。为了读取内存值,一个快速而又脏的方法是使用一个指针来迭代地读取堆栈区域的值。对于寄存器值,您可以使用asm关键字。

1

如果你想要某种开箱错误通过互联网申报的,你应该检查出EQATEC analytics

其中有一个可用的C++接口。

2

可以使用Debug Help Library中的MiniDumpWriteDump函数通过每个线程的堆栈转储创建转储文件。我相信你可以在Visual Studio中打开文件并查看它的调试器(或接近它)。

2

Maciej Sinilo's blog还有一些很好的示例代码(他也是一名游戏程序员)。代码包括如何从崩溃中获取信息(例如,它是无效的读取还是写入)以及callstack或者minidump。这足以让我开始为我们的测试系统添加一个崩溃处理程序。

希望有所帮助。