是否有一种简单的方法可以使本机崩溃的应用程序崩溃,以便测试本机崩溃报告?
请注意,我正在寻找所有设备的通用解决方案,而不是设备特定的解决方案。我想过使用Unsafe类(将非法地址写入卡住),但看起来它不支持
答案 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();
}
}