关于c ++:故意崩溃的代码

Code to crash intentionally

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the easiest way to make a C++ program crash?

我经常在我们的代码库中看到一个构造,在这个构造中,程序以某种方式进入无效状态,代码会故意出错,只是为了强制崩溃。通常是这样的:

1
2
3
4
5
if(<something is wrong>)
{
    int *ptr = NULL;
    *ptr = 0;
}

这当然会导致空引用异常,并以不可恢复的方式崩溃程序。我只是想知道这是不是最好的方法?首先,它读起来不好。如果不加评论,您可能不会意识到这里发生的崩溃是有意的。其次,几乎没有办法从中恢复过来。它不会引发异常,因此不能由其他代码处理。它只是杀死了程序,没有办法回溯。它也没有提供太多的线索来解释为什么它会在这里坠毁。它将在所有的构建中崩溃,不像,比方说,断言。(我们确实有一个非常健壮的断言系统可用,但在这种情况下并不总是使用它。)

这是我们在各地使用的风格,我不可能试图说服任何人。我只是好奇这在这个行业有多普遍。


你不能故意"崩溃"一个程序,因为根据它的定义,崩溃是当一个程序出错并且不能确定地运行时。

终止执行的标准方法是通过std::terminate;通常实现这一点的方法是调用std::abort,它针对进程发出一个不可阻塞的信号(自动导致std::terminate),并导致许多操作系统产生一个核心转储。


您应该抛出一个异常,它基本上是以一种可控的方式故意导致崩溃。下面是一个例子,在这个问题的帮助下。

1
throw string("something_went_wrong");

更好的是,错误被捕获或修复。断言也是一个不错的选择。


我想这是在没有调试的情况下触发核心转储的方法。核心转储然后提供足够的信息来分析问题。在"程序员错误"(或bug)的情况下,这比抛出异常要好,因为堆栈展开不允许您构建合理的核心转储。通过调用std::terminate并预先注册(使用std::set_terminate)一个生成核心转储的函数或类似的函数,可以以更优雅的方式实现类似的效果。有关更详细的解释,请参阅本文。