为AOSP获取静态二进制的回溯

时间:2016-09-30 12:56:09

标签: android c++ android-ndk gdb android-source

由于几个原因,我必须将我的二进制文件编译为静态 我还创建了一个简单的测试应用程序,只有两个代码:

ALOGE(LOG_TAG, "Start");
ProcessState::self()->startThreadPool();
ALOGE(LOG_TAG, "startThreadPool");
IPCThreadState::self()->joinThreadPool();
ALOGE(LOG_TAG, "quit");

似乎如果我将这个小应用程序编译为静态,就像我需要编译我的生产应用程序一样, debuggerd 不会在SIGSEGV上被触发。

此外,我可以在AOSP中静态链接以进行回溯的唯一库是libunwind。 (CallStack,libcorkscrew和libbacktrace没有静态版本)

libunwind的问题是当我调用unw_step时会崩溃。一个我不知道如何调查的崩溃,因为我没有堆栈跟踪。 (http://eli.thegreenplace.net/2015/programmatic-access-to-the-call-stack-in-c/

那么,有关获取静态AOSP arm二进制的堆栈跟踪的任何提示吗?

1 个答案:

答案 0 :(得分:0)

你是如何编译libunwind的?您使用的是llvm-llvm源还是aosp external / libunwind源?这是什么拱门?

如果target_arch_abi是armeabi或armeabi-v7a,则libunwind在aosp中编译为llvm-libc ++ abi的一部分

来自$ NDK / sources / cxx-stl / llvm-libc ++ abi中的Android.mk的

  

ifneq(,$(过滤器armeabi%,$(TARGET_ARCH_ABI)))     use_llvm_unwinder:= true

如果这是一个arm项目,那么如果我没记错的话,在$ NDK / sources / cxx-stl / llvm-libc ++ abi中也应该有一个预构建的静态libunwind.a。可能值得从那里尝试预编译的静态libunwind.a