gdb调试coredump(使用篇)

本文详细介绍了如何利用gdb进行coredump调试,包括coredump的基本概念、如何设置ulimit以启用coredump、Windows下的coredump配置,以及在gdb中分析core文件的方法,特别讨论了多线程环境下调试coredump的技巧,旨在帮助开发者更有效地定位和解决问题。
摘要由CSDN通过智能技术生成

什么是coredump

  Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。

   该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内容。

 

   注:core是在半导体作为内存材料前的线圈,当时用线圈当做内存材料,线圈叫做core。用线圈做的内存叫做core memory。

 

 

ulimit 

虽然我们知道进程在coredump的时候会产生core文件,但是有时候却发现进程虽然core了,但是我们却找不到core文件。

 

linuxSolaris下是需要进行设置的。

 

ulimit  -c 可以设置core文件的大小,如果这个值为0.则不会产生core文件,这个值太小,则core文件也不会产生,因为core文件一般都比较大。

 

使用ulimit  -c unlimited来设置无限大,则任意情况下都会产生core文件。

 

WindowsminiDumpFullDump的设置

 

Windows下需要在下面的注册表,

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\WindowsError Reporting]

下面加一项LocalDumps,并做如下项配置:

Value

描述

Type

默认值

DumpFolder

文件保存路径

REG_EXPAND_SZ

%LOCALAPPDATA%CrashDumps

DumpCount

dump文件的最大数目

REG_DWORD

10

DumpType

指定生成的dump类型:
0:Custom dump
1:Mini dump
2:Full dump

REG_DWORD

1

CustomDumpFlags

仅在DumpType0时使用
MINIDUMP_TYPE的组合

REG_DWORD

MiniDumpWithDataSegs|
MiniDumpWithUnloadedModules|
MiniDumpWithProcessThreadData
















上面的配置信息,可以通过打开注册表来手动添加。

首先,打开cmd或者运行程序(微软图标+R


 



如上截图,可以通过图形界面手动添加这些注册表信息,然后windows系统在有进程crash的时候就会保存fulldump的文件。

 

或者通过reg文件的方式来进行注册

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="F:\\study_Test\\Dump"
"DumpCount"=dword:a
"DumpType"=dword:1

 

如上,通过新建一个fulldump.reg的文件,保存上面内容,双击后,这些信息就会注册到注册表中。

 

gdb 调试coredump的简单示例

 

  • 24
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值