有什么办法可以在gdb core dump中获取线程的开始时间

问题描述

我正在尝试在Linux核心转储中找到最旧的线程。所以我需要获取正在运行的每个线程的开始时间。那么有什么方法可以获取线程的开始时间。

我尝试在gdb核心文件中执行一些命令,但是这给了每个调用线程堆栈,但没有启动时间。

致谢
拉比

解决方法

我正在尝试在Linux核心转储中找到最旧的线程。因此,我需要获取正在运行的每个线程的开始时间。

您的结论与您先前的说法不符。

那么有什么方法可以获取线程的开始时间。

否:该时间未记录在线程结构中的任何地方。

但是,通常 Linux会按递增顺序分配线程ID,因此按线程ID进行排序应该可以为您提供所需的顺序。例如:

(gdb) info thread
  Id   Target Id                           Frame 
* 1    Thread 0x7fa91e769740 (LWP 2128629) __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  2    Thread 0x7fa91d766700 (LWP 2128632) 0x0000557aa5787165 in fn ()
  3    Thread 0x7fa91af61700 (LWP 2128637) 0x0000557aa5787165 in fn ()
  4    Thread 0x7fa91df67700 (LWP 2128631) 0x0000557aa5787165 in fn ()
  5    Thread 0x7fa91cf65700 (LWP 2128633) 0x0000557aa5787165 in fn ()
  6    Thread 0x7fa91bf63700 (LWP 2128635) 0x0000557aa5787165 in fn ()
  7    Thread 0x7fa91c764700 (LWP 2128634) 0x0000557aa5787165 in fn ()
  8    Thread 0x7fa91a760700 (LWP 2128638) 0x0000557aa5787165 in fn ()
  9    Thread 0x7fa91b762700 (LWP 2128636) 0x0000557aa5787165 in fn ()
  10   Thread 0x7fa919f5f700 (LWP 2128639) 0x0000557aa5787165 in fn ()

在这里您可以看到首先创建了线程1,然后创建了线程4、2、5、7等(这里的LWP是Linux线程ID)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...