以编程方式本机崩溃

Native crash programmatically

有没有一种简单的方法可以让应用程序崩溃并发生本机崩溃,以便测试本机崩溃报告?

请注意,我正在寻找适用于所有设备的通用解决方案,而不是特定于设备的解决方案。想过用Unsafeclass(把非法地址写入卡住),但是貌似不支持

如果要从 Java 代码导致崩溃,请使用 dalvik.system.VMDebug.crash()。这不是 public API 的一部分,因此您需要通过反射来访问它。这对 Dalvik 有效;我不知道它是否仍然适用于艺术。

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

最可靠的方法是使用 NDK 创建一个简单的本机库。我个人喜欢将值存储在 "named" 地址中,例如 0xdeadd00d,因为它们让您知道这是您的代码故意崩溃,但空指针 derefs 也有效。

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

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