我在我的 Qt 应用程序的 Windows 版本中添加了一个 mini-core-dump 功能(通过 __try/__except 和 MiniDumpWriteDump()),因此如果/当我的应用程序崩溃时,一个 .dmp 文件将被写入磁盘供我稍后查看和调试。
这工作得很好,但为了测试,我希望有一个已知可靠的方法来让我的程序崩溃。例如,GUI 中可能有一个“立即崩溃”按钮,当用户单击它时,它会导致应用程序故意崩溃。
当然,一种方法是这样的:
int * badPointer = NULL;
*badPointer = 666;
这对我有用,但我不喜欢这种方法,因为它依赖于未定义的行为——特别是,C++ 标准不需要上述代码导致崩溃,所以它是可能的(从语言律师的角度来看) 当上面的代码执行时,一些未来版本的编译器不会崩溃。
作为一种更“官方”的方法,我尝试了这个:
abort();
...确实会终止程序,但不会导致触发 MiniCrashDump 处理程序的 Windows 结构化异常,因此不会写入 .dmp 文件。
我的问题是,是否有“官方正确的方法”让我的程序崩溃?我看到 Windows API 有一个可以调用的 RaiseException() 函数,但我不确定它的正确参数应该是什么。这是要走的路,还是有一些更具体的电话我会更好地使用?