Android一种Crash导致重启验证方式
echo c >/proc/sysrq-trigger
这里涉及sysrq-trigger的使用,可参考文章:
https://blog.csdn.net/beckdon/article/details/41313713
Linux系内存分析方法
Userspace
1 procrank
Check procrank 观察是否有异常进程
Item | Description |
---|---|
Vss | 耗用的虚拟内存 |
Rss | 实际使用的物理内存(包含共享库占用的内存) |
Pss | 实际使用的物理内存(按比例分配共享库占用的内存) |
Uss | 进程独占的物理内存 |
我们一般关注Uss和Vss,观察是否有特别的异常进程。注意,这里仅能看到UserSpace的进程信息。
2 procmem
看到异常的进程后,可用详细常看该进程详细内存分布
注意这里可能会有很多“匿名”内存信息,这些可能就是该进程下的线程Heap。
3 /proc/pid/maps && /proc/pid/smaps
通过cat /proc/pid/maps 可看到该进程具体虚拟地址空间分布情况。
通过cat /proc/pid/smaps 可看到对应虚拟地址空间的详细信息(占用物理内存等)。
KernelSpace
有一篇文章详细记录了整个分析过程,值得学习。
https://www.cnblogs.com/arnoldlu/p/11599232.html
Android编译依赖问题
调试Android时,遇到一个Android.bp 依赖一个动态库却总是提示missing dependencies。
确认后发现依赖的动态库是使用Android.mk编译;而自己模块是Android.bp编译,故提示build Fail。
总结:
- Andriod.bp 编译的模块可以被Android.bp和Android.mk编译依赖;
- Android.mk编译的模块仅可以被Android.mk编译的模块依赖,无法被Android.bp编译的模块依赖