获取静态二进制文件的AOSP回溯



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

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没有静态版本)

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

那么,对于获取静态AOSP臂二进制文件的堆栈跟踪有什么提示吗?

你是如何编译libwind的?您是使用llvm-llvm源还是aosp外部/libwind源?还有,这是什么拱门?

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

从Android。在$NDK/sources/cxx-stl/llvm-libc++abi:

ifneq (,$(filter armeabi%,$(TARGET_ARCH_ABI)))Use_llvm_unwinder:= true

如果这是一个手臂项目,那么还应该有一个预构建的静态libunwind。$NDK/sources/cxx-stl/llvm-libc++abi如果我没记错的话。可能值得尝试预编译的静态libwind。A from there