0
点赞
收藏
分享

微信扫一扫

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我



文章目录

  • 一、遇到问题
  • 二、Native日志分析
  • 三、信号量(signal) 和 错误码(code)分析
  • 四、PC指针addr2line定位
  • 4.1 addr2line路径
  • 4.2 so路径
  • 4.3 addr2line查询
  • 五、修改代码
  • 六、后续~


一、遇到问题

客户小姐姐反馈一个Crash问题,但是概率很小,开发和测试都没遇到过。

总不能让小姐姐帮忙抓取logcat日志。

逼不得已,用上了杀手锏友盟+U-APM神器,重新给小姐姐更新了一版APK。

然后,开瓶82年的冰阔落,坐等日志上来。

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_性能监控

二、Native日志分析

来了来了,日志它来了。

乍看,有点慌。

这是大名鼎鼎的Native Crash啊。

这是隔壁C++组的锅啊,我就说像我这么资深的程序员,怎么可能写出这bug呢~

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_crash_02

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_crash_03

三、信号量(signal) 和 错误码(code)分析

不过,来都来了,看都看了,且再认真看看具体是哪里有bug~

点击全屏查看,一堆十六进制,咋看有点慌。

不过老司机带路,莫慌,翻开友盟的文档中心的Native崩溃说明

  • SIGSEGV,一个进程执行了一个无效的内存引用,或发生段错误。
  • SEGV_MAPERR,地址不在 /proc/self/map 映射中

看到这里,有点头绪咯,空指针段错误

跟着老司机,接着往下走,go~

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_crash_04


基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_android_05


基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_性能监控_06

四、PC指针addr2line定位

4.1 addr2line路径

  • 先找到ndk的路径,在local.properties
  • 基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_性能监控_07


  • 再找到addr2line
  • 其中aarch64-linux-android-4.9arm-linux-androideabi-4.9都是可以的

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_apm_08

4.2 so路径

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_友盟_09

4.3 addr2line查询

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_crash_10

E:\umeng\CrashDemo-1.2.0>c:\Users\Administrator\AppData\Local\Android\Sdk\ndk\22.0.7026061\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line -e app/.cxx/cmake/debug/armeabi-v7a/libnative-lib.so 000000000001d67c 000000000001d56c  000000000001d4a0
/buildbot/src/android/ndk-release-r22/toolchain/llvm-project/libcxx/../../../toolchain/llvm-project/libcxxabi/src/demangle/ItaniumDemangle.h:?
/buildbot/src/android/ndk-release-r22/toolchain/llvm-project/libcxx/../../../toolchain/llvm-project/libcxxabi/src/demangle/ItaniumDemangle.h:2816
/buildbot/src/android/ndk-release-r22/toolchain/llvm-project/libcxx/../../../toolchain/llvm-project/libcxxabi/src/cxa_demangle.cpp:309

  • 按照log的打印顺序,我们从下往上看,先执行cxa_demangle.cpp:309
  • 但是,cxa_demangle是个啥东西呢
  • 新的ABI委托执行C++运行库的入口
  • 就是这个入口走错了?走到了空指针?

char* abi::__cxa_demangle    (    const char *     mangled_name,    
char *     output_buffer,    
size_t *     length,    
int *     status    
)    
New ABI-mandated entry point in the C++ runtime library for demangling.
char* abi::__cxa_demangle(const char* mangled_name,                          char* output_buffer, size_t* length,                          int* status)

  • 这时候定睛一看,Java_com_umeng_crashdemo_MainActivity_stringFromJNI
  • 那就先查它

五、修改代码

代码定位到这里来,一看代码,很简单啊

改改改!!!

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_crash_11

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_umeng_crashdemo_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
//    std::string hello = NULL;
    return env->NewStringUTF(hello.c_str());
}

六、后续~

重新打包个APK,发给客户小姐姐。

翘着二郎腿,再开一瓶冰阔落~

果不其然~

客户小姐姐很开心,说我真棒,要把她闺蜜介绍给我。

咦,我的春天来了~

我的嘴角不自觉扬起45°的微笑。

基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我_性能监控_12


哎,醒醒,醒醒,要debug了~~~




举报
0 条评论