以编程方式进行本机崩溃

时间:2015-07-01 17:47:08

标签: android android-ndk dalvik

是否有一种简单的方法可以使本机崩溃的应用程序崩溃,以便测试本机崩溃报告?

请注意,我正在寻找所有设备的通用解决方案,而不是设备特定的解决方案。我想过使用Unsafe类(将非法地址写入卡住),但看起来它不支持

2 个答案:

答案 0 :(得分:3)

如果您想通过Java代码导致崩溃,请使用dalvik.system.VMDebug.crash()。这不是公共API的一部分,因此您需要通过反射访问它。这适用于Dalvik;我不知道它是否仍适用于Art。

支持某些sun.misc.Unsafe方法,因此您可以通过在offset等调用中为putIntVolatile()选择适当的值来导致崩溃。如果偏移量是对象指针的否定,则取消引用地址为零并崩溃。

最可靠的方法是使用NDK创建一个简单的本机库。我个人赞成在“命名”地址中存储一个值,比如0xdeadd00d,因为它们会让你知道你的代码是故意崩溃的,但是null指针derefs也可以工作。

答案 1 :(得分:0)

@fadden指出使用dalvik.system.VMDebug.crash(),这是一个通过反射访问它的辅助方法。

public void crashNatively() {
    try {
        Class.forName("dalvik.system.VMDebug")
                .getMethod("crash")
                .invoke(null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}