我正在开发通过NDK与Android协同工作的本机应用程序.

有没有其他方法可以找到那条线索?

推荐答案

backtrace()是一个非标准的Glibc扩展,甚至在ARM上也有点不稳定(我认为,你需要用-funwind-tables构建所有东西,然后有一个新的Glibc?)

据我所知,Android使用的仿生C库中没有这个函数.

你可以try 将Glibc backtrace的源代码拉到你的项目中,然后用unwind table重建有趣的东西,但对我来说这听起来很难.

如果您有调试信息,您可以try 使用附加到您的进程的脚本启动gdb,并以这种方式打印回溯,但是我不知道gdb是否可以在Android上工作(虽然Android基本上是Linux,所以这么多id可以,但是安装细节可能会有问题?)你可以通过某种方式倾倒核心(仿生生物支持这一点吗?)并在事后进行分析.

C++相关问答推荐

将C中的2D char数组写入/读取到二进制文件

`__attribute__((destructor))` 在某些情况下没有运行?

删除逗号之间的白色字符,但不删除逗号内的内容

如何在 C 中的结构数组中使用动态二维数组?

在 c 标头中使用 c++ 标头中的枚举类

最新 container_of 宏中 __mptr 的用途是什么?

代码块输出不同于在线编译器

如何从文件中读取并解析它

&> 重定向是如何在 UNIX shell 中实现的?

如何解读一个单词并在 C 的 txt 文件中找到它的所有匹配项?

C/C++ 编译器如何区分常规二维数组和指向数组的指针数组?

打印函数指针时不兼容的指针类型警告

我怎样才能在另一个宏中使用一个宏来将宏的定义连接到某个东西? C/C++

如何正确拦截 Linux 内核 5.* 中的系统调用?

为什么将 free 的返回值转换为 void?

在结构数组的末尾需要空括号“{}”是什么?

在 C 中无法返回数组实际上意味着什么?

为什么要在 C 和 C++ 项目中创建 include/ 目录?

Linux 上的异​​步信号处理程序是如何执行的?

如果不在内存中,表达式和常量存储在哪里?