Articles of coredump

如何在使用GDB生成核心转储文件时限制核心转储文件的大小

我正在ARM9主板上运行一个embedded式应用程序,总闪存容量仅为180MB。 我能够运行gdb ,但是当我这样做 (gdb) generate-core-dump 我得到一个错误 warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. Saved corefile core.5546 The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] Tamper Detected **********OUTSIDE ifelse 0********* length […]

是否有可能获得只包含调用堆栈,线程和本地variables的Linux核心?

我的公司正在利用Linux中的coredumpfunction(特别是CentOS)来追踪一些难以发现的问题。 不幸的是,我们有一堆小型虚拟机运行在有限的高清空间下,而完整的核心转储正在造成问题,因为这些堆占用了大量的空间。 发生分段错误时是否可以让Linux转储callstack,线程和本地variables? 我试图将转储限制为50兆,但似乎并不是所有需要的细节都在前50兆字节(ulimit -c 51200)。 我们可以像这样截断堆,但是我一直没有find什么大小的工作。 我知道有可能在需要的时候用一些额外的代码写出你自己的调用堆栈,但是我们正处在一个我们正在结束的阶段,这对于我们遇到的这些最后几个问题来说将是一个难题。

为什么LD_PRELOAD不能用于加载的共享库之一?

我在RedHat Linux 5.0上有一个内部共享库,它提供了free和malloc : >nm ./libmem_consumption.so | grep -P -e "\bfree\b|\bmalloc\b" 0000000000006540 T free 00000000000088a0 T malloc 这个共享库负责提供关于进程内存消耗的信息。 不幸的是,当它与Apache httpd使用时,这个共享库存在一个问题。 当Apache httpd与这个库一起运行时,我得到了一个libc::free的coredump和一个指针无效的消息。 问题似乎在http.so中,这是由httpd加载的libphp5.so加载的共享库。 其实当我不加载http.so一切正常,没有coredump。 (加载或不加载http.so是由一个configuration文件中的指令来pipe理:extension = http.so)当我加载http.so ,httpd进程的coredumps。 httpd是这样启动的: LD_PRELOAD=./libmem_consumption.so ./bin/httpd -f config 并在出口coredumps。 当我设置LD_BIND_NOW = 1和http.so被加载,我看到(在gdb下)http.so有free@plt指向libc::free并在其他加载的库(例如libphp5.so )中free@plt指向libmem_consumption.so::free 。 这怎么可能? 顺便说一下,当我输出LD_DEBUG = all并保存输出到一个文件,我看到这些行为libphp5.so(也加载): 25788: symbol=free; lookup in file=/apache2/bin/httpd [0] 25788: symbol=free; lookup in file=/apache2/ps/lib/libmem_consumption.so [0] […]

Linux核心转储过大!

最近我一直在注意到由我的应用程序生成的核心转储大小的增加。 最初,它们大小只有5MB左右,包含了大约5个堆栈,现在我拥有大于2GB的核心转储,其中包含的信息与较小的转储没有区别。 有什么办法可以控制生成的核心转储的大小吗? 它们不应该至less比应用程序本身小吗? 二进制文件是这样编译的: 在释放模式下用debugging符号进行编译(即GCC中的-g编译器选项)。 debugging符号被复制到一个 单独的文件和剥离 二进制文件。 GNUdebugging符号链接被添加到二进制文件。 在应用程序开始时,有一个调用setrlimit ,它将核心限制设置为无穷大 – 这是问题吗?

如果应用程序在GC中,如何可靠地进行JVM核心转储?

我试图find我的Java应用程序中的内存泄漏的原因。 我需要为一个长 GC循环的进程获取一个堆转储。 在这种情况下,Jmap不起作用,因为应用程序被挂起,而且堆栈非常大。 不幸的是,jmap抛出了我所取得的核心转储的UnknownOopException。 我想在GC中采取核心转储是不正确的。 有没有什么办法来暂停Java进程的地方,采取核心转储将是正确的? 还是我完全错了,由于其他一些问题而破坏了核心转储?

无法为我的崩溃的程序创build一个核心文件

我正在使用Ubuntu 12.04 LTS。 我写了一个简单的程序如下创build崩溃 // null.c #include<stdio.h> int main() { int *p = NULL; int k=*p; printf("%d",sizeof(0)); return 0; } 现在我运行“gcc -g null.c”,然后是“./a.out”,输出如预期。 Segmentation fault (core dumped) 现在我想看看使用gdb的核心转储文件。 我做了以下的事情 我检查了当前目录,没有核心转储文件 我试图用内核“core.%e。%p”来改变/ proc / sys / kernel / core_pattern。 但是我无法写入文件。 这是说“Fsync失败”。 我使用了“sudo vi / proc / sys / kernel / core_pattern”。 仍然无法写入文件。 我想在我的当前目录中创build核心转储。 现在做什么?

a.out被ELF文件格式取代?

我有几个问题: 为什么a.out被ELF取代? a.out格式中导致ELF文件格式升级的主要缺陷是什么? 较早的核心转储基于a.out,但是现在它们基于ELF。 ELF提供的各种优势是什么?

核心转储本身是可执行的吗?

核心转储维基百科页面说 在类Unix系统中,核心转储通常使用标准的可执行映像格式: a.out in older versions of Unix, ELF in modern Linux, System V, Solaris, and BSD systems, Mach-O in OS X, etc. 这是否意味着核心转储本身是可执行的? 如果没有,为什么不呢? 编辑:由于@ WumpusQ.Wumbley在评论中提到了coredump_filter ,可能上面的问题应该是: 可以生成一个核心转储,使其可以自行执行?

find哪个程序导致核心转储文件

最近我一直在经历激烈的程序/软件包安装,所以我无法确定哪个新安装的程序(或旧程序)在我的个人文件夹中出现core文件。 这是一台服务器,所以我最好在机器上找出任何可能的不稳定源。

Linux中的select性核心转储 – 如何select转储的部分?

我正在寻找一种方法来select核心转储中包含的部分和内存区域。 我的应用程序的核心转储大小约为30GB,其中大部分是预分配的缓冲区,我甚至不需要debugging(以后可以清零)。 但是,由于转储过大,应用程序花费太多时间才能完成崩溃并开始恢复。 任何人都可以想到一种方法来提前select哪些细分市场将在核心转储? 谢谢