1.Java Crash
java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出。Logcat会在“AndroidRuntime”tag下输出Java的调用栈。
2.Native Crash
No.&Name |
Reason |
Resolution |
Comment |
1.空指针 |
试图对空指针进行操作时(如读取空指针指向的内存),处理器就会产生一个异常 |
在使用指针前加以判断,如果为空,则是不可访问的。 |
空指针目前是糯米app最多的一种引起crash的原因,但是它也很容易被发现和修复。 |
2.野指针 |
指向的是一个无效的地址,该地址如果是不可读不可写的,那么会马上Crash;如果访问的地址为可写,而且通过野指针修改了该处的内存,那么很有可能会等一段时间(其它的代码使用了该处的内存后)才发生Crash。 |
|
。 |
数组越界 |
访问无效的地址。如果该地址不可读写,则会马上Crash;如果修改了该处的内存,造成内存破坏,那么有可能会等一段时间才在别处发生Crash。 |
|
破坏内存的bug,很难查找。 |
整数除以零 |
整数除以零默认的处理方式是终止进程 |
在做整数除法时,要判断被除数是否为0的情况。 |
改情况在开发环境下很难出现,但庞大的用户量和复杂的用户输入,就很容易导致被除数为0的情况出现。 |
格式化输出参数错误 |
与野指针类似,但是只会读取无效地址的内存,而不会造成内存破坏。其结果是要么打印出错乱的数据,要么访问了无读写权限的内存而立即宕机。 |
在书写输出格式和参数时,要做到参数个数和类型都要与输出格式一致 |
|
缓冲区溢出 |
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏函数调用的堆栈,修改函数调用的返回地址。如果不是黑客故意攻击,那么最终函数调用很可能会跳转到无法读写的内存区域,造成程序崩溃。 |
|
|
内存管理错误 |
|
|
imageview,图片占据太多内存,糯米app狂刷列表。 |