(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)
Go -- 如何使用gcore工具获取一个core文件而不重启应用?
[实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?