2017-06-09 8 views
0

我有一个来自长时间运行的进程的核心文件。这将有助于我获得该流程的开始时间。从核心文件获取程序开始时间

在linux下有没有办法,使用gdb从核心文件中获取进程启动时间?

感谢

+0

长期运行的程序是什么?你有它的源代码吗? –

+0

是的,我有它的源代码。我将添加时间戳以开始未来。然而它不会帮助我使用当前的核心文件。 – Jan

回答

0

有linux下的方式,用gdb只得到从核心文件的过程开始时间?

我不这么认为。但是,请参阅core(5) & proc(5)并在您的core文件上运行file(1)命令。

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

我想你有核心转储可执行文件的源代码(否则,检查核心在实践中不是很有用)。

我建议改善您的长期运行程序的来源,将time(2)的结果放入一个全局或静态变量,在main开始附近。 您可能还想在您的源代码中添加时间戳。


这里有个窍门让(您的源代码)时间戳,假设你用make构建和使用git版本控制:

要么只使用在一些使用__DATE____TIME__ C或C++文件,或者更可能的是附加的生成的包含日期和文件的C文件目前git commit登录。如果您使用make随时都在添加一些规则像

_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(并在规则建立你的可执行文件,而且还_timestamp.o链接,并在其配方中添加$(RM) _timestamp.c)。


我建议,对于长时间运行的程序,如服务器(或批量数字代码运行天),用在他们里面syslog(3)设施。一些初始syslog可能会显示my_timestamp,my_lastgitcommit,my_lastgittag,如上面的_timestamp.c中所生成的。

+0

谢谢,我正在搜索互联网,也发现它不能只从核心文件完成。我会保持这个开放一段时间,看看别人是否知道如何做到这一点,如果没有答案是增加,那么我会接受你的答案 – Jan