【发布时间】:2017-06-08 10:01:57
【问题描述】:
我正在为一个 Android 应用程序的原生崩溃报告集成 breakpad,该应用程序已经有一个重要的原生代码库,该代码库内置在一个单一的 so 中。我已经为此添加了 breakpad 静态库,并且当报告本机崩溃时,我能够生成 dmp 文件。然而,本机 dmp 很小(3-4 KB),并且 minidump_stackwalker 会出现以下错误:
myadav11$ minidump_stackwalk 5f9221b3-75f2-c305-2dde0eb7-1724e335.dmp
minidump.cc:4811: INFO: Minidump opened minidump 5f9221b3-75f2-c305-2dde0eb7-1724e335.dmp
minidump.cc:4931: INFO: Minidump not byte-swapping minidump
minidump.cc:5414: INFO: GetStream: type 15 not present
minidump.cc:5414: INFO: GetStream: type 7 not present
minidump.cc:5414: INFO: GetStream: type 7 not present
minidump.cc:5414: INFO: GetStream: type 1197932545 not present
minidump.cc:5414: INFO: GetStream: type 6 not present
minidump.cc:5414: INFO: GetStream: type 1197932546 not present
minidump.cc:5414: INFO: GetStream: type 4 not present
minidump.cc:5414: INFO: GetStream: type 14 not present
minidump.cc:5414: INFO: GetStream: type 5 not present
minidump.cc:5414: INFO: GetStream: type 3 not present
minidump_processor.cc:158: ERROR: Minidump 5f9221b3-75f2-c305-2dde0eb7-1724e335.dmp has no thread list
minidump_stackwalk.cc:97: ERROR: MinidumpProcessor::Process failed
minidump.cc:4783: INFO: Minidump closing minidump
myadav11$
我有一个 Android breakpad 测试应用程序,它使用相同的编译器和链接器标志,并且能够生成大约 300 KB 的正确 dmp 文件。我曾尝试使用 Android Studio C++ 调试器调试 breakpad 代码,我注意到子进程 breakpad 生成,并以错误结束,而且似乎将调试器同时附加到子进程并不容易。
我已经查看了对 breakpad 的支持,并且提到了类似的问题,但没有讨论任何解决方案。任何帮助将不胜感激。
【问题讨论】:
-
问题追溯到github.com/google/breakpad/blob/master/src/client/linux/… line 'if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) { return false; }' 在最新的 master 中修复
标签: android debugging google-breakpad