gpt4 book ai didi

android - 无法找到 android NDK 堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:12 39 4
gpt4 key购买 nike

我正在开发一个应用程序,它在带有 SIG_SEGV 的 NDK 代码中崩溃。这会导致应用程序挂起大约 15 秒,然后 Android 会提示我强制关闭它。这会将 java 堆栈跟踪打印到 logcat,但我没有看到 NDK 的任何堆栈跟踪。我已经使用 ADB 重定向了 stdio,但我仍然没有看到堆栈跟踪。我如何将 C++ 堆栈跟踪打印到 logcat 或在哪里打印?
使用 Android 2.3.4
NDK r8b

最佳答案

“强制关闭”对话框是由崩溃的应用程序发布的。这听起来像是 Dalvik 崩溃而不是本地崩溃。如果进程收到 SIGSEGV,它应该通知 debuggerd 并退出,并在日志中留下痕迹。在您的问题中包含崩溃的 logcat 输出可能会有所帮助。

无论如何,当线程处于 native 代码中时,最新版本的 Android 包括与 Dalvik 堆栈转储混合的 native 跟踪。如果你有一个运行最新版本 Android 的 root 设备,你可以要求 debuggerd 使用 adb shell debuggerd -b <pid> 转储所有线程的踪迹。 .

不过,您使用的是 Android 2.3.x,所以这些都对您没有帮助。您最好的选择是向进程发送致命信号以获取 debuggerd 故障转储。信号必须发送两次,例如:

adb shell kill -6 <pid> ; sleep 1 ; adb shell kill -6 <pid>

这需要 Root设备,因为“shell”用户不能向任意进程发送信号。根据具体发生的情况,您应该能够在“强制关闭”对话框仍在屏幕上时执行此操作......但是如果线程在没有停止进程的情况下设法崩溃,那么可能没有堆栈可以获取来自的痕迹。

关于android - 无法找到 android NDK 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036851/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com