如何收集coredump信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何收集coredump信息相关的知识,希望对你有一定的参考价值。

查看 error log:

我们拿到了崩溃位置0xee36f1,如何找到与之相对的代码位置呢?

找台测试机,获取对应版本的安装包:

解压:

然后用 GDB 打开 mysqld:

在 0xee36f1 位置打一个断点:

我们可以看到,gdb 将崩溃位置的文件名和行号都打印出来,

剩下的事情,就可以交给开发工程师,按照这个崩溃堆栈来进行问题排查。

赠送章节

红框内的这串信息是什么?我们来解开看一下,

这段信息分为两段,"+0x71" 是一个偏移量,前面是一串文字,我们将文字解析出来:

可以看到前面这串文字是一个函数签名的编码,用 c++filt 还原编码以后,可以看到完整的函数签名。

红框内的这串信息的意思就是崩溃位置是 一个函数起始位置 + 偏移量。

我们大概可以猜到,这个 MySQL 的缺陷是在为 binlog 产生新的文件名时发生的。

小贴士:

函数起始位置 + 偏移量 是一种内存位置的表示方法,但该位置不一定是这个函数内的代码。

以本例来说,0xee36f1 这个位置,程序找到了就近的函数 generate_new_name 的起始位置,计算出有 0x71 这么多偏移,就表示成了 generate_new_name+0x71 这种形式。

但 0xee36f1 这个位置的代码,大概率是,但,不一定是 generate_new_name 这个函数内部的一段代码。

参考技术A dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成dump文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。...
这个问题曾在我去某公司面试时被提起过,可惜考官问的是php的BUG调试方法,后来居然说的就是Core dump,当时我就想这和PHP一点毛关系都没有,开启Core dump几乎是所有C/C++开发必备的,只是常态,可能是他们的PHP扩展用得太多了,也从侧面说明了...
开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.co...
这种错误,你有代码和coredump,都找不到问题了,别人怎么搞。 应该是内存相关的问题,对象已经释放了之类的。 你在gdb , frame 1 , frame 6等等,跳到对应的调用栈上去。检查TCards , vector这种对象的指针是不是还是有效的? 到底什么原因...
一般步骤 1. file core文件,可以显示出core文件是哪个进程产生的 2.使用gdb或者dbx加载core文件, gdb 进程名 core文件 3.where,显示堆栈信息,显示出coredump的地方 例如有个程序叫 ABC,产生了一个叫core的core文件, 那么输入 file core, 会...
可能是多次调用了这个try catch块,某次调用阻塞在select导致log顺序混乱,使你误判了~这里的select多路复用很容易导致日志顺序看上去不合逻辑
ulimit -c unlimited,可以加到.bashrc里也可以更改limits.conf文件本回答被提问者采纳

以上是关于如何收集coredump信息的主要内容,如果未能解决你的问题,请参考以下文章

coredump时如何过滤掉共享内存

如何生成coredump文件

如何从 systemd-coredump / coredumpctl / systemd-journal 获取内存映射信息

android coredump 怎么生成 kill

GDB如何从Coredump文件恢复动态库信息

Linux内核调试方法总结之coredump