在Linux下,是否可以对可执行文件已被删除的进程进行gcore?
Under Linux, is it possible to gcore a process whose executable has been deleted?
在 CentOS 6.6 上编程时,我在屏幕会话中 运行 删除了一个可执行文件(糟糕,make clean
)。
现在,不相关的,我想gcore
调试一些东西。我已重建可执行文件,但 gcore
不接受替换后的文件。它知道原始文件已被删除,不会让我转储核心。
# gcore 15659
core.YGsoec:4: Error in sourced command file:
/home/dev/bin/daemon/destinyd (deleted): No such file or directory.
gcore: failed to create core.15659
# ls -l /proc/15659/exe
lrwxrwxrwx. 1 root root 0 Mar 12 21:33 /proc/15659/exe -> /home/dev/bin/daemon/destinyd (deleted)
# ln -s /proc/15659/exe /home/dev/bin/daemon/destinyd
ln: creating symbolic link `/home/dev/bin/daemon/destinyd': File exists
# rm /proc/15659/exe
rm: remove symbolic link `/proc/15659/exe'? y
rm: cannot remove `/proc/15659/exe': Permission denied
FreeBSD's gcore
has an optional argument "executable" which looks promising (as if I could specify a binary to use that is not /proc/15659/exe
), but that's of no use to me as Linux's gcore
没有任何此类参数。
有什么解决方法吗?或者我是否只需要重新启动进程(使用重新创建的可执行文件)并等待我正在跟踪的错误重现?
尽管 ls -l /proc/15659/exe
的输出,原始可执行文件实际上仍然可以通过该路径获得。
因此,我不仅能够使用简单的 cp
恢复原始文件(尽管这不足以恢复 link 并使 gcore
正常工作),但我能够使用此路径作为可执行文件将 GDB 附加到进程:
# gdb -p 15659 /proc/15659/exe
然后是 运行“generate-core-file
”命令,然后是“detach
”。
然后,我就可以根据需要自由检查核心文件了:
# gdb /proc/15659/exe core.15659
事实上,我忘记了 GDB 生成核心文件的能力,而且我对实际将 GDB 附加到进程感到焦虑,因为时机非常重要:在正确的时间生成核心文件以捕获该错误.
但是 而且,我的担心显然是没有根据的,GDB 能够为我制作一个可爱的 core.15659
。
在 CentOS 6.6 上编程时,我在屏幕会话中 运行 删除了一个可执行文件(糟糕,make clean
)。
现在,不相关的,我想gcore
调试一些东西。我已重建可执行文件,但 gcore
不接受替换后的文件。它知道原始文件已被删除,不会让我转储核心。
# gcore 15659
core.YGsoec:4: Error in sourced command file:
/home/dev/bin/daemon/destinyd (deleted): No such file or directory.
gcore: failed to create core.15659
# ls -l /proc/15659/exe
lrwxrwxrwx. 1 root root 0 Mar 12 21:33 /proc/15659/exe -> /home/dev/bin/daemon/destinyd (deleted)
# ln -s /proc/15659/exe /home/dev/bin/daemon/destinyd
ln: creating symbolic link `/home/dev/bin/daemon/destinyd': File exists
# rm /proc/15659/exe
rm: remove symbolic link `/proc/15659/exe'? y
rm: cannot remove `/proc/15659/exe': Permission denied
FreeBSD's gcore
has an optional argument "executable" which looks promising (as if I could specify a binary to use that is not /proc/15659/exe
), but that's of no use to me as Linux's gcore
没有任何此类参数。
有什么解决方法吗?或者我是否只需要重新启动进程(使用重新创建的可执行文件)并等待我正在跟踪的错误重现?
尽管 ls -l /proc/15659/exe
的输出,原始可执行文件实际上仍然可以通过该路径获得。
因此,我不仅能够使用简单的 cp
恢复原始文件(尽管这不足以恢复 link 并使 gcore
正常工作),但我能够使用此路径作为可执行文件将 GDB 附加到进程:
# gdb -p 15659 /proc/15659/exe
然后是 运行“generate-core-file
”命令,然后是“detach
”。
然后,我就可以根据需要自由检查核心文件了:
# gdb /proc/15659/exe core.15659
事实上,我忘记了 GDB 生成核心文件的能力,而且我对实际将 GDB 附加到进程感到焦虑,因为时机非常重要:在正确的时间生成核心文件以捕获该错误.
但是 core.15659
。