(gdb) gcore gcore 警告:内存读取失败

Posted

技术标签:

【中文标题】(gdb) gcore gcore 警告:内存读取失败【英文标题】:(gdb) gcore gcore warning: Memory read faile 【发布时间】:2014-07-20 13:03:35 【问题描述】:

我在 android shell 中的 Andorid 上使用 gdb: ./gdb --pid 29083 ... 核心 警告:corefile 部分的内存读取失败,0x730c5000 处的 8192 字节。 保存的 corefile core.29083 (gdb)

我也设置了 ulimit -c 50000 但核心转储仍然超过了这个限制。当我执行 ls -l 检查文件大小时,它超过了 300 MB。在这种情况下,我应该如何限制核心转储的大小?

使用 GDB 生成核心转储文件时如何限制其大小?

【问题讨论】:

ulimit shell 命令的参数是 1024 字节块,因此您实际上设置了 50MB 的限制。但是,您系统上/proc/sys/kernel/core_pattern 的内容是什么?如果它是一个管道,内核将忽略 coredump 限制,这取决于被管道传输到的程序来遵守该限制。我不了解 Android,但在我的 Ubuntu 系统上,它通过管道传输到 apport,而 apport 显然有一个错误,它将核心限制乘以另一个 1024。 @MarkPlotnick root@mako:/proc/sys/kernel # cat core_pipe_limit cat core_pipe_limit 0 ===================================== =======================root@mako:/proc/sys/kernel # cat core_pattern cat core_pattern core ======================= =====================================root@mako:/data/tools/gdb/bin # ulimit -a ulimit -a time(cpu-seconds) unlimited file(blocks) unlimited coredump(blocks) 0 data(KiB) unlimited stack(KiB) 8192 lockedmem(KiB) 65536 nofiles(descriptors) 1024 ....... 对不起,我完全误读了您的问题,没有注意到您使用 gdb 的 gcore 命令的部分。我查看了 gdb 的源代码,从 7.7 版开始,它在运行其 gcore 命令时不遵守任何核心转储大小限制。 【参考方案1】:

您可以将GameGuardian 用于转储内存。需要根。如果需要,您可以部分转储。

内存编辑器选项卡-菜单-内存转储-选择范围和文件夹-按确定-等待吐司“转储结束”。

这里有一些视频示例如何做到这一点:

How to dump memory of any running processes in Android - GameGuardian How to dump odex file from memory on Android - GameGuardian How to dump deleted file from memory on Android - GameGuardian

【讨论】:

以上是关于(gdb) gcore gcore 警告:内存读取失败的主要内容,如果未能解决你的问题,请参考以下文章

Go -- 通过GOTRACEBACK生成程序崩溃后core文件的方法(gcore gdb)

如何在 RHEL 7 上安装 gcore

Go -- 如何使用gcore工具获取一个core文件而不重启应用?

[实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?

[实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?

[实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?