我正在开发一个应用程序,该应用程序在使用SIG_SEGV的NDK代码中崩溃。这会导致应用程序挂起大约15秒,然后Android会提示我强制关闭它。这会将java堆栈跟踪打印到logcat,但是我没有看到NDK的任何堆栈跟踪。我用ADB重定向了stdio,但是我仍然没有看到堆栈跟踪。我怎样才能打印C++堆栈跟踪到logcat或在哪里打印呢?
使用的Android 2.3.4
NDK R8B无法找到android NDK堆栈跟踪
2
A
回答
1
“强制关闭”对话框由崩溃的应用程序发布。这听起来像是Dalvik崩溃而不是本机崩溃。如果进程正在接收SIGSEGV,它应该通知调试器并退出,并在日志中留下一个跟踪。在你的问题中包含崩溃的logcat输出可能会有所帮助。
无论如何,当线程处于本机代码时,最新版本的Android包含与Dalvik堆栈转储混合的本机跟踪。如果您的设备运行最新版本的Android,则可以要求debuggerd将adb shell debuggerd -b <pid>
的所有线程的跟踪转储出来。
虽然你在Android 2.3.x,所以没有任何帮助你。您最好的选择是发送进程一个致命信号来获取调试器崩溃转储。信号必须被发送两次,例如:
adb shell kill -6 <pid> ; sleep 1 ; adb shell kill -6 <pid>
这需要有根设备,如在“壳”用户不能将信号发送到任意的处理。根据究竟发生了什么,当“强制关闭”对话框仍然在屏幕上时,你应该可以做到这一点......但是如果线程设法在不降低进程的情况下崩溃,那么可能没有堆栈来获取一丝不苟。
0
0
相关问题
- 1. 从javascript堆栈跟踪中查找Java实际堆栈跟踪
- 2. 如何防止NDK将堆栈跟踪转储到android logcat?
- 3. 使用AWS TransferManager上传时无法找到堆栈跟踪
- 4. 无法理解该堆栈跟踪
- 5. 无法理解堆栈跟踪MVC .NET
- 6. 无法理解此堆栈跟踪(parse.com)
- 7. 堆栈跟踪3
- 8. 堆栈跟踪如何构建以及堆栈如何跟踪?
- 9. log4j截断堆栈跟踪
- 10. 破译堆栈跟踪
- 11. 调试堆栈跟踪?
- 12. ASP.NET堆栈跟踪问
- 13. JXErrorPane没有堆栈跟踪
- 14. C++堆栈跟踪问题
- 15. 我无法找出栈跟踪错误
- 16. 显示DNN堆栈跟踪?
- 17. CryptographicException在堆栈跟踪
- 18. 了解堆栈跟踪
- 19. Android - 无法打开堆栈跟踪文件
- 20. Node.js堆栈跟踪信息
- 21. 堆栈跟踪记录器
- 22. 什么是堆栈跟踪?
- 23. 如何堆栈跟踪extlib?
- 24. 异常堆栈跟踪
- 25. VB6中的堆栈跟踪
- 26. 堆栈跟踪错误
- 27. HTMLcleaner堆栈跟踪错误
- 28. JVM日志堆栈跟踪
- 29. 调试堆栈跟踪
- 30. NPE没有堆栈跟踪
我得到了“无法杀死pid 26646:操作不允许” – agoaj
我忘了说你需要一个根植设备(答案更新)。 – fadden