我正在尝试调试在 Android 5 上运行的用 C 编写的 JNI 代码。当我的一个函数被调用时,我想将堆栈跟踪写入 adb 日志,以便我可以看到函数是从哪里调用的。
我找到的第一个资源表明我需要使用 libcorkscrew,并包含有关如何使用该库的完整示例。不幸的是,libcorkscrew 似乎从 Android 5 中消失了,现在应该使用 libunwind。对于我的项目,有几个问题:
关于将 libunwind 加入项目的说明很少和/或具有误导性 - 一些资源说从 github 下载项目并构建它(指导无效),其他资源表明该库已经是 Android 的一部分5.
所有的示例都是用 C++ 编写的,而且 libunwind 似乎只对其中的函数进行了 C++ 绑定(bind)。由于我的代码是 C 而不是 C++,并且写入日志函数而不是通过 C++ stdlib,所以这是不可用的。
除其他外,我查看了这些页面:
有没有一种方法可以在 Android 5 的 C 代码中获取堆栈跟踪而不会使程序崩溃?
最佳答案
你能在 Android 上使用 backtrace_symbols_fd 吗?如果可以,您可以使用这个:
void *array[100];
size_t size;
size = backtrace (array, 100);
backtrace_symbols_fd (array, size, STDOUT_FILENO);
关于android - 在 Android 5/Lollipop 上打印 C 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214323/