如果进程崩溃并离开核心转储,或者我创建了一个核心转储,gcore
那我该如何分析呢?
我希望能够使用jmap
,jstack
,jstat
等也看到所有变量的值.
这样我就可以找到崩溃或冻结的JVM的原因.
我的生产系统偶尔会出现我在开发环境中无法重现的内存泄漏.我使用了Python内存分析器(特别是Heapy)在开发环境中取得了一些成功,但它无法帮助我处理我无法重现的事情,而且我不愿意使用Heapy来检测我们的生产系统,因为它需要一段时间来做它的事情,它的线程远程接口在我们的服务器中不能很好地工作.
我想我想要的是一种转储生产Python进程(或至少是gc.get_objects)的快照的方法,然后离线分析它以查看它在哪里使用内存. 我如何获得这样的python进程的核心转储? 一旦我有了,我该怎么做一些有用的东西?
我想更改核心转储文件的默认位置,以便每次生成核心转储时,它都会转到该目录.此外,是否可以通过此位置中崩溃文件的名称保存转储文件?
如何从核心转储文件中获取堆栈跟踪?该文件大约14 MB,并在我的应用程序退出后生成说"分段错误"
我在Red Hat 5.5上
我想要一个C程序在某些情况下生成核心转储.这是一个在生产环境中运行的程序,不容易停止和重新启动以调整其他类型的调试代码.此外,由于它在生产环境中,我不想调用abort().调查中的问题不容易在非生产环境中复制.我想要的是程序,当它检测到某些问题时,自己产生核心转储,最好有足够的信息来重命名文件,然后继续.
我正在为FreeBSD上的服务器编写错误处理代码.对于非常严重的错误,我希望通过立即终止来避免数据损坏.这很容易,exit(3)
.在我退出之前,我输出了导致我的相关变量.然而,理想情况下,这种终止将伴随着.core
我可以完全调查是什么让我对这种灾难性的(并且可能难以复制)状态.
我怎么能强迫这种情况发生?
我在远程系统上生成了一个我无法直接访问的核心文件.我还有来自远程系统的库文件的本地副本,以及崩溃程序的可执行文件.
我想在gdb中分析这个核心转储.
例如:
gdb path/to/executable path/to/corefile
Run Code Online (Sandbox Code Playgroud)
我的库位于当前目录中.
在过去,我见过调试器通过提供选项"-p"来实现它.或"-p/=."; 所以我的问题是:
在分析gdb中的核心文件时,如何指定首先从相对于当前目录的路径加载库?
所以我编写了偶尔崩溃的错误代码......并创建了一个stackdump文件.
使用addr2line我可以通过解码一个地址来弄清楚程序如何到达崩溃点.是否有替代工具可以使用堆栈转储简化调试?有没有办法在Insight/Gdb中加载此信息?
我有一个处于奇怪状态的Python应用程序.我不想做这个过程的实时调试.我可以将其转储到文件中并稍后检查其状态吗?我知道我以后在gdb中恢复了C程序的核心文件,但我不知道如何从gdb中以有用的方式检查Python应用程序.
(这是关于在生产系统中调试memleaks的问题的变体.)
好像我无法在Mac OS X 10.6.8中生成核心转储.
$ ulimit -c unlimited
$ ./a.out
Hello world!
Segmentation fault
$ find ~/ -type f -name core
# ls -la /cores/
total 0
drwxrwxr-t@ 2 root admin 68 24 jui 2010 .
drwxrwxr-t 31 root admin 1122 17 oct 15:52 ..
Run Code Online (Sandbox Code Playgroud)
我当前的目录,我的HOME和/ cores /仍为空...