使用ulimit命令,我设置了核心文件大小。
ulimit -c unlimited
我使用gcc -g选项编译了c源代码。 然后a.out生成。 在命令之后
./a.out
存在运行时错误。
(core dumped)
但未生成核心文件。(例如core.294340)
如何生成核心文件?
答案 0 :(得分:6)
首先确保容器将核心写入容器文件系统中的现有位置。核心生成设置在主机中设置,而不是在容器中设置。例如:
echo '/cores/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern
将在文件夹/核心中生成核心。
在Dockerfile中,创建该文件夹:
RUN mkdir /cores
您需要指定核心大小限制; ulimit shell命令不起作用,因为它只影响当前的shell。您需要使用具有软硬限制的docker run选项--ulimit。构建Docker镜像后,运行容器,如:
docker run --ulimit core=99999999999:99999999999 --mount source=coredumps_volume,target=/cores ab3ca583c907 ./a.out
其中coredumps_volume是您已创建的卷,其中核心将在容器终止后保留。 E.g。
docker volume create coredumps_volume
答案 1 :(得分:1)
如果要生成现有进程的核心转储,例如使用gcore
,则需要以--cap-add=SYS_PTRACE
启动容器,以允许以根用户身份运行的调试器附加到容器中。处理。 (有关信号的核心转储,请参见其他答案)