问题标签 [gcore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
19879 浏览

c - 如何分析 coredump 的内存泄漏

我想从核心文件分析中分析内存泄漏。

我已经编写了示例代码来注入内存泄漏并使用 gcore 命令生成核心文件。

查找进程 ID

并生成核心

我从核心文件中找到了如下常见模式(如stackoverflow上的建议另一个线程有没有办法找到进程的哪个部分使用了大部分内存,只查看生成的核心文件?

下面两个地址疑似一个

核心文件具有以下重复模式

但我不太清楚如何从 gdb info address 或 x 之类的命令访问它。谁能告诉我如何将符号信息从二进制格式转换?

0 投票
1 回答
2235 浏览

linux - 在Linux下,是否可以gcore一个可执行文件已被删除的进程?

在 CentOS 6.6 上编程时,我删除了一个make clean在屏幕会话中运行的可执行文件(哎呀,)。

现在,无关的,我想gcore调试一些东西的过程。我已经重建了可执行文件,但gcore不接受替换的文件。它知道原始文件已被删除,不会让我转储核心。

FreeBSDgcore有一个可选参数“ executable ”,看起来很有希望(好像我可以指定要使用的二进制文件不是/proc/15659/exe),但这对我没有用,因为Linuxgcore没有任何这样的参数。

有什么解决方法吗?还是我只需要重新启动该过程(使用重新创建的可执行文件)并等待我正在跟踪的错误重现自身?

0 投票
0 回答
878 浏览

macos - 在 OS X 10.11 中转储进程内存

我编写了一个工具,可以将特定部分从基于远程 mach-o 的进程转储到文件中。

但是,升级到 El Capitan (10.11) 后,由于 SIP 功能阻止我使用task_for_pid. 这是为了防止代码注入到远程签名的进程中。

但是,我只需要它来读取远程进程的内存空间。以下代码在 10.11 上是否存在某种替代方案?

0 投票
0 回答
565 浏览

java - SOLARIS jmap 错误从核心转储创建堆转储

尝试从通过 Solaris 上的 gcore 生成的核心文件创建堆转储时出现以下错误:

附加到核心文件时出错:在目标进程/核心中找不到 libthread!

创建核心文件的 JVM 与用于创建堆转储的 java 实例相同。任何人都知道为什么会发生此错误。我以前在 RedHat 实例中这样做过,但在 Solaris 上是第一次。这可能是由于 Solaris gcore 输出与 jmap 不兼容吗?

任何帮助将不胜感激。

0 投票
2 回答
1367 浏览

android - Android:在 gdbserver 中找不到调试符号

我尝试在我的根 Android 上附加一个进程并使用 GDB 创建核心文件,但它无法创建 gcore 文件,因为找不到符号。

在我的手机上,我打开终端应用程序并输入

在终端中授予 root 访问权限。我输入

显示所有正在运行的进程。我输入

在我的电脑上,我打开 gdb.exe(来自 Android NDK)并输入

我得到了这些信息

使用我自己编译的 gdb.exe,我得到了另一个信息

我输入

它说

我已经在 /system/bin 中安装了与我的内核架构匹配的正确 gdbserver 二进制文件

我尝试了低于 Android 4.4.4 的不同 Android 操作系统,它们没有 PIE 保护功能,但我仍然遇到同样的问题。我尝试使用移植版 gdb 客户端,它运行良好。

我只想用运行 Android 5.1.1 和 2 GB RAM 的强大设备保存核心文件,而不是在我的低端平板电脑上使用 gdb 客户端,它有 512 MB RAM 并运行 Android 4.4.4,而 gdb 无法完全创建corefile 由于内存不足。

0 投票
1 回答
893 浏览

linux - Eclipse neon:生成核心转储

我正在 Ubuntu 16.04 上的 Eclipse Neon 中调试应用程序。我的项目要求我生成一个核心转储(其中包括正在调试的进程的所有内存(堆、堆栈、代码段等)),同时为该应用程序提供一个调试会话。

在 Eclipse 中调试同一应用程序时,我尝试从终端使用“gcore”。这给了我:

警告:进程 32062 已被进程 32032 跟踪
ptrace:不允许操作。
如果没有调试过程,您将无法做到这一点。
程序没有运行。
gcore:创建 core.32062 失败

如果我使用“gcore”而不在 Eclipse 中调试应用程序,则会生成核心转储。

我没有找到从 Eclipse 中生成核心转储的选项……这存在吗?在哪里可以找到它?我可以添加一个插件,允许我在调试应用程序时从 Eclipse 中“执行 gcore”(类似)命令吗?

谢谢!希望你能帮忙。

0 投票
0 回答
702 浏览

linux - 使用 gcore 生成核心时进程卡住

我有一个多线程进程,我想为其生成核心转储。gcore 运行,gdb 启动,进程根据 ps 进入“t”状态。然而,它卡在了那里。

由于它已经被跟踪,我无法附加另一个 gdb 会话来查看发生了什么。我转储了内核线程,一些进程线程在“ptrace_stop”中,而其他线程正在工作。

关于 gcore 卡住的任何想法都会有所帮助。系统也有足够的可用内存(免费报告为 300MB,但也报告交换已启动 - 虽然不确定何时)。

该进程在 virtualbox vm 上的 docker 容器内运行。

我跑了:

这似乎产生了一个 gdb 子进程

0 投票
1 回答
469 浏览

linux - 如何从进程核心文件中检索内存内容?

我想分析特定进程产生的每个内存块内容。所以我所做的是使用“gcore pid”来获取进程的核心转储,但我不知道如何检索内容,有人可以帮忙吗?

0 投票
1 回答
731 浏览

linux - 在退出 linux 时转储进程内存

我想在进程退出时转储它的内存。我见过的所有解决方案gcoregdb甚至procdump for linux都在执行过程中转储核心,而不是在它终止时转储核心

Windows 的 Procdump 对此有一个非常优雅的解决方案,即-t允许 procdump 在进程退出时创建转储。

我偶然发现,ulimit -c unlimited但这又只会为非优雅退出生成转储。

我想要转储的进程可以是任何进程,而不是我的应用程序。

0 投票
1 回答
612 浏览

python - 如何从核心转储中反转字符串的虚拟地址?

我试图在进程的内存中找到一个特定的字符串。具体来说,我想找到存储它的虚拟地址。我编写了一个 python 脚本来调用gcore该过程并扫描结果文件以查找所有匹配项。然后我调用pmap并遍历那里的条目。我的想法是找到每个索引对应的内存段,然后减去前面段的大小之和,得到正确段的偏移量,加到基数上,得到虚拟地址。但是,当我在使用 gdb 计算的虚拟地址处搜索字符串时,我找不到正确的字符串。为什么我的方法不起作用?不gcore按顺序转储虚拟内存的全部内容吗?

find在相关的说明中,我还尝试使用 gdb 手动扫描文件——当我使用它的命令扫描相关内存区域中的字符串时,它似乎没有找到几乎那么多的匹配项(具体数字不同大大)。这是为什么?