Linux 从核心文件获取程序开始时间
我有一个长期运行的进程的核心文件。这将有助于我确定这一进程的开始时间 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 谢谢 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 我不这么认为。但是,请参见&并在Linux 从核心文件获取程序开始时间,linux,debugging,gdb,Linux,Debugging,Gdb,我有一个长期运行的进程的核心文件。这将有助于我确定这一进程的开始时间 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 谢谢 在linux下有没有一种方法,使用gdb只从核心文件获取进程启动时间 我不这么认为。但是,请参见&并在core文件上运行该命令 将来,您可能会使用/proc/sys/kernel/core_模式(在系统启动时)。%t给出转储时间(而不是开始时间) 我猜您已经有了内核转储可执行文件的源代码(否则,检查内核实际上没有多大帮助) 我建议改进长期运行程序的源代
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
。这是什么长时间运行的程序?你有它的源代码吗?是的,我有它的源代码。我将添加时间戳,以便将来开始。不过,它不会帮助我目前的核心文件。谢谢,我在互联网上搜索,还发现它不能只从核心文件。我会把这个打开一段时间,看看其他人是否知道如何做到这一点,如果没有是的答案,那么我会接受你的答案