有没有办法在gdb核心转储中获取线程的开始时间
Posted
技术标签:
【中文标题】有没有办法在gdb核心转储中获取线程的开始时间【英文标题】:is there any way to get the start time of the thread in gdb core dump 【发布时间】:2020-09-03 16:25:38 【问题描述】:我正在尝试在 Linux 核心转储中查找最旧的线程。所以我需要获取每个正在运行的线程的开始时间。那么有什么方法可以获取线程的开始时间。
我尝试了 gdb 核心文件中的一些命令,但它给出了每个线程调用堆栈但没有启动时间。
问候 拉比
【问题讨论】:
【参考方案1】:我正在尝试在 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)。
【讨论】:
以上是关于有没有办法在gdb核心转储中获取线程的开始时间的主要内容,如果未能解决你的问题,请参考以下文章