Linux 从核心文件获取程序开始时间

Linux 从核心文件获取程序开始时间,linux,debugging,gdb,Linux,Debugging,Gdb,我有一个长期运行的进程的核心文件。这将有助于我确定这一进程的开始时间 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 谢谢 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 我不这么认为。但是,请参见&并在core文件上运行该命令 将来,您可能会使用/proc/sys/kernel/core_模式(在系统启动时)。%t给出转储时间(而不是开始时间) 我猜您已经有了内核转储可执行文件的源代码(否则,检查内核实际上没有多大帮助) 我建议改进长期运行程序的源代

我有一个长期运行的进程的核心文件。这将有助于我确定这一进程的开始时间

在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间

谢谢

在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间

我不这么认为。但是,请参见&并在
core
文件上运行该命令

将来,您可能会使用
/proc/sys/kernel/core_模式
(在系统启动时)。
%t
给出转储时间(而不是开始时间)

我猜您已经有了内核转储可执行文件的源代码(否则,检查内核实际上没有多大帮助)

我建议改进长期运行程序的源代码,将的结果放入一个全局变量或静态变量中,靠近
main
的开头。 您可能还希望在源代码中添加时间戳


假设您使用
make
构建,并使用
git
作为版本控制,下面是一个获取(源代码)时间戳的技巧:

在某些C或C++文件中,只使用“代码”、“X”、“DATEOGY<”、“代码”和“<代码”>“TythyOx/<代码>,或者更可能是一个附加的生成的C文件,包含日期,例如当前的代码> GIT提交log”。如果您使用

make
feel free,请添加一些规则,如

_timestamp.c: Makefile
        @date +'const char my_timestamp[]="%c";' > _timestamp.tmp
        @(echo -n 'const char my_lastgitcommit[]="' ; \
           git log --format=oneline --abbrev=12 --abbrev-commit -q  \
             | head -1 | tr -d '\n\r\f\"\\\\' ; \
           echo '";') >> _timestamp.tmp
        @(echo -n 'const char my_lastgittag[]="'; \
           (git describe --abbrev=0 --all || echo '*notag*') | \
             tr -d '\n\r\f\"\\\\'; echo '";') >> _timestamp.tmp
        @mv _timestamp.tmp _timestamp.c
Makefile
中(以及在构建可执行文件的规则中,将其与
\u timestamp.o
链接,并在其配方中添加
$(RM)\u timestamp.c



对于长时间运行的程序,如服务器(或运行数天的批处理数字代码),我建议使用其中的工具。一些初始的
syslog
可能会显示上面
\u timestamp.c
中生成的
my\u timestamp
my\u lastgitcommit
my\u lastgittag

这是什么长时间运行的程序?你有它的源代码吗?是的,我有它的源代码。我将添加时间戳,以便将来开始。不过,它不会帮助我目前的核心文件。谢谢,我在互联网上搜索,还发现它不能只从核心文件。我会把这个打开一段时间,看看其他人是否知道如何做到这一点,如果没有是的答案,那么我会接受你的答案