惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - PKICA

汇编语言语法详解 gdb汇编调试 gdb-pwndbg的安装与使用指南 gdb调试插件gef C语言thread_local linux系统readelf命令使用指南 gdb查看命令 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
gcore转储进程内存
PKICA · 2026-04-13 · via 博客园 - PKICA

gcore 是 GDB 套件中的一个实用工具,用于在不停止或崩溃程序的情况下,为正在运行的进程生成内存快照(Core Dump)。这在调试线上“卡死”或难以复现的逻辑问题时非常高效。 

1. 基本用法

在终端中直接运行,最简单的语法如下:

gcore <PID> 
  • PID: 目标进程的进程 ID。
  • 结果: 默认在当前目录下生成名为 core.<PID> 的文件。

2. 常用参数 

-o <filename> 指定输出文件的前缀或完整名称。 gcore -o my_dump 1234-a 转储所有内存映射(包括通常被排除的部分)。 gcore -a 1234-d <dir> 指定运行 GDB 时使用的目录。 gcore -d /tmp 1234
参数说明示例

3. 操作流程

  • 获取 PID: 使用 ps -ef | grep 程序名pidof 程序名 找到目标进程 ID。
  • 生成快照: 执行 gcore <PID>。此时进程会短暂暂停,待文件写入磁盘后恢复运行。
  • 使用 GDB 分析:
    gdb <可执行程序路径> <生成的core文件>
    
    进入 GDB 后,可以使用 bt 查看调用栈,或使用 info threads 查看所有线程状态。

4. GDB 内部替代命令

如果你已经在使用 GDB 调试(attach)某个进程,可以直接在 GDB 提示符下输入:

(gdb) generate-core-file [文件名]
# 或者简写
(gdb) gcore [文件名]

这与外部的 gcore 工具效果一致。

5. gcore主要用途

传统的 Core Dump 是程序崩溃时的“验尸报告”,而 gcore 生成的是“活体切片”。

它的主要用途可以概括为以下四个核心场景:

1). 诊断“程序卡死”(Deadlock / Hang)

这是 gcore 最经典的使用场景。当程序没有崩溃,但不再响应请求(比如死锁、无限循环、等待信号量)时:

  • 你不能等到它崩溃(因为它可能永远卡在那)。
  • 你可以用 gcore <pid> 拍个快照,然后把这个快照拉回本地环境,用 thread apply all bt 查看所有线程的调用栈,找出到底是哪个锁导致了卡死。

2). 线上环境的“非破坏性”采样

在线上(Production)环境直接用 GDB 挂载(attach)进行交互式调试是非常危险的,因为 GDB 会暂停(Stop)进程。

  • gcore 的执行速度非常快(主要是磁盘 I/O 时间)。
  • 生成快照后,你可以立即分离(detach)并让程序恢复运行。
  • 这样你就可以在不影响业务运行的前提下,把包含程序完整状态(内存数据、全局变量、堆栈)的文件带离现场,在离线环境下慢慢分析。

3). 捕捉“中间状态”或内存泄漏

当你怀疑程序运行到某个阶段逻辑有问题,或者发现内存占用异常上升时:

  • 对比分析:在时间点 A 生成一个 core 文件,在时间点 B 再生成一个。
  • 通过对比两个快照中的全局变量、堆分配情况,可以有效定位内存泄漏或状态机逻辑错误。

4). 容错与“时光倒流”

在进行一些可能破坏程序状态的危险 GDB 操作(比如手动调用 call 改变变量值)之前,先执行 gcore

  • 如果你的手动干预导致程序跑飞了或崩溃了,你手头还有一个完整的、干预前的现场备份。

总结:它和传统 Core Dump 的本质区别

  • 传统 Core Dump:是被动触发的,用于回答 “程序是怎么死的?”
  • gcore:是主动触发的,用于回答 “程序现在在干什么?” 或 “程序的内存里现在装了什么?”

6. 注意事项

  • 磁盘空间: Core 文件是进程内存的完整镜像,如果进程占用内存很大(如数 GB),生成的文件也会同样大,请确保目标磁盘空间充足。
  • 权限: 通常需要 root 权限或与目标进程相同的用户权限才能执行转储。
  • ptrace 限制: 某些系统可能会限制 ptrace 调用(如设置了 /proc/sys/kernel/yama/ptrace_scope),导致 gcore 失败,此时可能需要调整内核参数。

参考资料:

[0] gdb调试线程