当前位置:  开发笔记 > 编程语言 > 正文

Linux上的核心转储文件:如何获取打开文件的信息?

如何解决《Linux上的核心转储文件:如何获取打开文件的信息?》经验,为你挑选了1个好方法。

我有一个进程的核心转储文件可能有文件描述符泄漏(它打开文件和套接字,但显然有时会忘记关闭其中一些).有没有办法在崩溃之前找出进程打开了哪些文件和套接字?我无法轻易重现崩溃,因此分析核心文件似乎是获取bug的唯一方法.



1> terminus..:

如果您有一个核心文件,并且您已使用debuging选项(-g)编译该程序,则可以查看核心被转储的位置:

$ gcc -g -o something something.c
$ ./something
Segmentation fault (core dumped)
$ gdb something core

你可以用它来做一些验尸后的调试.一些gdb命令:br打印堆栈,fr跳转到给定的堆栈帧(参见br的输出).

现在,如果你想查看在分段错误时打开哪些文件,只需处理SIGSEGV信号,在处理程序中,只需转储/ proc/PID/fd目录的内容(即使用system('ls -l/proc)/PID/fs')或execv).

有了这些信息,您可以轻松找到导致崩溃的原因,打开哪些文件以及是否连接了崩溃和文件描述符泄漏.


这并不能真正回答这个问题,即使用核心文件发现打开的文件,而不是将调试输出添加到现有程序中。无论如何,奥利弗都无法重现问题。
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有