由于几个原因,我必须将我的二进制文件编译为静态 我还创建了一个简单的测试应用程序,只有两个代码:
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二进制的堆栈跟踪的任何提示吗?
答案 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