IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

怎样用core文件调试你的linux程序?

博学无忧 2014-03-19 22:44:47 累计浏览 4,026 次
本机暂存

   core dump 文件对于诊断linux中程序的问题非常有用。当程序异常退出的时候,可能会生成core文件。如,程序写一个不属于他的内存,操作系统出于保护,会发信号给程序,程序可能会因此而退出,退出的时候可能会生成core文件。我们可以通过分析core文件,找出程序中那里有内存问题。这篇文章主要是阐述生成core文件需要做的一些设置。

   如何生成core文件

   默认linux操作系统是不允许生成core文件的。如下图:

   ulimit

   我们可以通过如下命令解除限制:

   #ulimit -c unlimited

   这时候,再看

   ulimit1

   注意,ulimit -c 的设置仅仅是对你完成设置后启动的进程有效。而且退出登陆后,再进入需要从新设置。否则从新登陆后启动的进程也无法生成core文件。

   如果想永久生效,可以把命令加入到 /etc/profile 中。建议不要这样做,想想为啥?

   如何找到core文件

   一般情况下,core文件会生成在你执行程序的地方。文件名是core.进程号

   你也可以指定core文件名和生成目录。在 /etc/sysctl.conf 文件中指定。

# vi /etc/sysctl.conf

   添加如下行:

   kernel.core_uses_pid = 1

   kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t

   fs.suid_dumpable = 2

   kernel.core_uses_pid = 1 - 追加进程号到core文件名中

   fs.suid_dumpable = 2 - 确保设置属主的进程也可以生成core文件

   kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t - 指定core文件生成的位置和文件名规则。文件名规则可以使用的参数有:

   %% - 符号%

   %p - 进程号

   %u - 进程用户id

   %g - 进程用户组id

   %s - 生成core文件时收到的信号

   %t - 生成core文件的 时间 (seconds since 0:00h, 1 Jan 1970)

   %h - 主机名

   %e - 程序文件名

   执行如下命令,让设置生效

#sysctl -p

   除此之外,也可以通过如下方式指定core文件名和路径

$echo /tmp/core-%e-%s-%u-%g-%p-%t > /proc/sys/kernel/core_pattern

   如何使用core文件

   可以使用gdb命令查看core文件信息

$ gdb -e /path/to/application -c /path/to/corefile

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Java开发岗位面试题归类汇总 (累计阅读 22,157)
  2. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  3. 我的 RHCA 之路 (累计阅读 14,013)
  4. Linux内存点滴 用户进程内存空间 (累计阅读 13,232)
  5. 给程序员新手的一些建议 (累计阅读 13,090)
  6. Linux 性能监控、测试、优化工具 (累计阅读 13,013)
  7. 关于linux内存free的一些事情 (累计阅读 12,870)
  8. ps - 按进程消耗内存多少排序 (累计阅读 12,690)
  9. Google怎么用linux (累计阅读 12,583)
  10. Linux Used内存到底哪里去了? (累计阅读 11,868)