Android日志分析

658 阅读13分钟

日志获取

正常日志获取

  • AndroidStudio直接查看logcat窗口
  • 通过adb指令获取
// 日志持续输出到命令行窗口
adb logcat

// 持续输出到指定文件(打印日志详细时间)
adb logcat -v time > d:\log.txt

// 带过滤的日志输出(指定日志标签TAG)
adb logcat -s xxx

// 带过滤的日志输出(日志级别是Error)
adb logcat -v time *:E

// 清空日志缓冲区
adb logcat -c

// 查看日志缓冲区
adb logcat -g

// 设置日志缓冲区大小;某些手机或定制机日志缓冲区不足,需要设置
adb logcat -G 150M

// monkey测试指令
adb shell monkey -p com.curry.xxx --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 100000000 >D:\monkey.txt

无法获取anr/tombstones

有些手机无法直接获取data/目录下的anr日志,/tombstones日志等;提示Permission denied

解决方式

adb分析线程

查看进程ID

adb shell "ps|grep 包名"
或
adb shell ps | find "包名"

image.png

查看线程总数Threads,以及其他信息

adb shell cat /proc/app的pid/status

image.png

获取详细的线程列表

adb shell
ps -T -p app的pid

image.png

实时监控进程中线程状况

adb shell
top -H -p app的pid

image.png

native日志排查

ndk-stack

  1. 需要分析的日志必须要带有一行*号

ndk-stack -sym D:\company_rs\project\SDK\ANDROID_AC020_SDK\ac020library\build\intermediates\cxx\Debug\4b291936\obj\arm64-v8a -dump C:\Users\admin\Desktop\dumpstate-2025-04-24-08-54-06\FS\data\tombstones\tombstone_14

addline

image.png

没有指向实际的行数

D:\Android\Sdk\ndk\21.1.6352462\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin>aarch64-linux-android-addr2line.exe -e D:test.so 000000000007ea80 D://Android/Sdk/ndk/25.0.8775105/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/bits/fortify/string.h:61

这是一个非常典型的 NDK 调试现象。

addr2line 的结果指向 string.h 的第 61 行,是因为编译器为了优化性能或进行安全检查(FORTIFY_SOURCE),将标准库函数 memcpy 内联 (inline)  到了你的代码中。

具体来说:

  1. 内联函数:  你的 yyy::xxx 调用了 memcpy
  2. 系统头文件:  编译器引用了 NDK 系统头文件 string.h 中对 memcpy 的定义(通常是一个包装器,用于检查缓冲区大小是否溢出)。
  3. 结果:  崩溃发生时,指令指针虽然逻辑上在你的函数内,但源码行号映射到了被内联进来的系统头文件里。

这意味着:我们确信崩溃是由 memcpy 引起的,但 addr2line 没能直接告诉你它是 yyy.cpp 里的哪一行。


给 addr2line 加上 -i (inlines) 参数,让它展开内联函数调用栈,这通常能显示出“上一层”调用者(即你的代码)。

请运行:

cmd
aarch64-linux-android-addr2line.exe -C -f -i -e D:\company_rs\project\SDK\ANDROID_GPU_SDK\app\src\main\cpp\android\libs\arm64-v8a\libgpu_image.so 000000000007ea80

日志举例

--------- beginning of crash
2025-04-25 11:04:24.769  2315-2541  libc                    com.xxx.yyyy                 A  Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x80ed80fa in tid 2541 (Thread-13), pid 2315 (xxx.yyyy)

// 一行*日志
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Build fingerprint: 'samsung/dm1qzcx/dm1q:14/UP1A.231005.007/S9110ZCS3CXE3:user/release-keys'
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Revision: '14'
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  ABI: 'arm64'
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Processor: '7'
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Timestamp: 2025-04-25 11:04:24.887337923+0800
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Process uptime: 74s
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  Cmdline: com.xxx.yyyy
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  pid: 2315, tid: 2541, name: Thread-13  >>> com.xxx.yyyy <<<
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  uid: 10693
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0000000080ed80fa
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x0  00000076b6987900  x1  000000006fc43eb8  x2  000000766a0136d8  x3  0000000000000000
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x4  000000766a0136e0  x5  0000000000018000  x6  0000000000018000  x7  0000000000000000
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x8  0000000080ed80ee  x9  0000000000000000  x10 000000766a0133c8  x11 00000077d52c0a34
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x12 0000000000000001  x13 000000766a01346c  x14 0000000000000000  x15 00000077d7ece8a0
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x16 000000766a0136d8  x17 000000786d10ad58  x18 0000007644950000  x19 000000766a0136e0
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x20 000000766a015000  x21 0000000000018000  x22 000000003e9b9000  x23 0000000000018000
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x24 0000000000000004  x25 000000779b6e5000  x26 0000000000000002  x27 00000000000000c0
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      x28 0000000000000000  x29 000000766a0135c0
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A      lr  00000000643baca0  sp  000000766a013540  pc  00000077d8393f4c  pst 0000000020001000
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  22 total frames
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A  backtrace:
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #00 pc 0000000000593f4c  /apex/com.android.art/lib64/libart.so (art::System_arraycopy(_JNIEnv*, _jclass*, _jobject*, int, _jobject*, int, int) (.__uniq.110717464938643750821353004938495288567)+88) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #01 pc 000000000200ac9c  /memfd:jit-cache (deleted) (offset 0x2000000) (art_jni_trampoline+156)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #02 pc 0000000002007454  /memfd:jit-cache (deleted) (offset 0x2000000) (com.xxx.zzzz.ddd.manager.lambda$initData$0$com-xxx-zzzz-ddd-manager+2980)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #03 pc 000000000033eba4  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #04 pc 0000000000512a24  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+1976) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #05 pc 0000000000495e6c  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>(art::interpreter::SwitchImplContext*)+1012) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #06 pc 0000000000357dd8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #07 pc 000000000000b140  /data/data/com.xxx.yyyy/code_cache/.overlay/base.apk/classes3.dex (com.xxx.zzzz.ddd.manager$$ExternalSyntheticLambda0.onFrame+0)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #08 pc 0000000000371b14  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.8722505846101882172)+232) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #09 pc 000000000037140c  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+964) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #10 pc 0000000000355768  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #11 pc 000000000033eba4  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #12 pc 000000000033cc28  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, std::__va_list)+772) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #13 pc 000000000057a7d0  /apex/com.android.art/lib64/libart.so (art::JNI<true>::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+192) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #14 pc 00000000003de194  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType) (.__uniq.99033978352804627313491551960229047428)+624) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #15 pc 000000000054e828  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) (.__uniq.99033978352804627313491551960229047428.llvm.362250457533049209)+72) (BuildId: 02bec5940be704b863f6514fc7d81c41)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #16 pc 000000000000c5fc  /data/app/~~5QY3-GZiFe6mQ1y3-KfZ7A==/com.xxx.yyyy-dRVNNDbPq6_gW-Eloxkm2g==/base.apk!libAsdk.so (offset 0x9c8000) (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+208) (BuildId: a3deebea478d0832e3c02fc09062f85545c60b7a)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #17 pc 000000000000c3c4  /data/app/~~5QY3-GZiFe6mQ1y3-KfZ7A==/com.xxx.yyyy-dRVNNDbPq6_gW-Eloxkm2g==/base.apk!libAsdk.so (offset 0x9c8000) (frame_callback(void*, void*)+436) (BuildId: a3deebea478d0832e3c02fc09062f85545c60b7a)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #18 pc 00000000000575ac  /data/app/~~5QY3-GZiFe6mQ1y3-KfZ7A==/com.xxx.yyyy-dRVNNDbPq6_gW-Eloxkm2g==/base.apk!libBsdk.so (offset 0x65e8000) (do_filter_noise()+1352) (BuildId: 82cb45e43af8819382f7730ce07298bb020c8263)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #19 pc 00000000000580c4  /data/app/~~5QY3-GZiFe6mQ1y3-KfZ7A==/com.xxx.yyyy-dRVNNDbPq6_gW-Eloxkm2g==/base.apk!libBsdk.so (offset 0x65e8000) (filter_noise_thread_func(void*)+24) (BuildId: 82cb45e43af8819382f7730ce07298bb020c8263)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #20 pc 00000000000fd0f4  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 02a91a85343debb2911714273ff2b670)
2025-04-25 11:04:25.223  3885-3885  DEBUG                   pid-3885                             A        #21 pc 0000000000096a04  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 02a91a85343debb2911714273ff2b670)

ANR日志排查

..TODO

PS