退出线程的回溯。
Backtrace for exited thread.
我注意到一个线程的回溯看起来像:
Thread 8 (Thread 0x7f385f185700 (LWP 12861)):
#0 0x00007f38655a3cf4 in __mcount_internal (frompc=4287758, selfpc=4287663) at mcount.c:72
#1 0x00007f38655a4ac4 in mcount () at ../sysdeps/x86_64/_mcount.S:47
#2 0x0000000000000005 in ?? ()
#3 0x00007f382c02ece0 in ?? ()
#4 0x000000000000002d in ?? ()
#5 0x000000000000ffff in ?? ()
#6 0x0000000000000005 in ?? ()
#7 0x0000000000000005 in ?? ()
#8 0x0000000000000000 in ?? ()
好像退出了线程,但我不确定。
我想知道如何理解它。特别是,我不明白 LWP
和 Thread 0x7f385f185700
是什么意思(那个地址是什么)?
此外,我注意到探查器表明 __mcount_internal
花费了相对较多的时间。它是什么以及为什么它很耗时?特别是,什么是 frompc
和 selfpc
计数器?
我的内核是 Linux 4.4.0,线程兼容 POSIX(C++11 实现)。
LWP
= Light Weight Process,表示线程。 Linux 每个线程都有自己的线程 ID,与 PID 编号的顺序相同,即使它们 不是 一个单独的进程。如果您在 /proc/PID/task
中查找多线程进程,您将看到每个线程 ID 的条目。
0x7f385f185700
可能是该线程的 RIP(指令指针)。
frompc
和 selfpc
是 __mcount_internal()
glibc 函数的函数参数。
您的回溯可以显示名称和参数,因为您为 glibc 安装了调试符号。你刚刚得到??对于父函数,因为您没有为包含它们的程序或库安装调试信息。 (使用 -g
编译您自己的程序,并安装 qtbase5-dbg
或 libglib2.0-0-dbg
等软件包,以获取您的发行版打包的库的调试符号。
mcount
似乎与分析有关(即由 -fprofile-generate
或 -pg
生成的代码)。这可以解释为什么它将程序计数器值作为参数。
Why do applications compiled by GCC always contain the _mcount symbol?
该线程尚未退出。如果有的话,你不会看到那么多细节。 (而且可能根本不会看到它。)
我注意到一个线程的回溯看起来像:
Thread 8 (Thread 0x7f385f185700 (LWP 12861)):
#0 0x00007f38655a3cf4 in __mcount_internal (frompc=4287758, selfpc=4287663) at mcount.c:72
#1 0x00007f38655a4ac4 in mcount () at ../sysdeps/x86_64/_mcount.S:47
#2 0x0000000000000005 in ?? ()
#3 0x00007f382c02ece0 in ?? ()
#4 0x000000000000002d in ?? ()
#5 0x000000000000ffff in ?? ()
#6 0x0000000000000005 in ?? ()
#7 0x0000000000000005 in ?? ()
#8 0x0000000000000000 in ?? ()
好像退出了线程,但我不确定。
我想知道如何理解它。特别是,我不明白 LWP
和 Thread 0x7f385f185700
是什么意思(那个地址是什么)?
此外,我注意到探查器表明 __mcount_internal
花费了相对较多的时间。它是什么以及为什么它很耗时?特别是,什么是 frompc
和 selfpc
计数器?
我的内核是 Linux 4.4.0,线程兼容 POSIX(C++11 实现)。
LWP
= Light Weight Process,表示线程。 Linux 每个线程都有自己的线程 ID,与 PID 编号的顺序相同,即使它们 不是 一个单独的进程。如果您在 /proc/PID/task
中查找多线程进程,您将看到每个线程 ID 的条目。
0x7f385f185700
可能是该线程的 RIP(指令指针)。
frompc
和 selfpc
是 __mcount_internal()
glibc 函数的函数参数。
您的回溯可以显示名称和参数,因为您为 glibc 安装了调试符号。你刚刚得到??对于父函数,因为您没有为包含它们的程序或库安装调试信息。 (使用 -g
编译您自己的程序,并安装 qtbase5-dbg
或 libglib2.0-0-dbg
等软件包,以获取您的发行版打包的库的调试符号。
mcount
似乎与分析有关(即由 -fprofile-generate
或 -pg
生成的代码)。这可以解释为什么它将程序计数器值作为参数。
Why do applications compiled by GCC always contain the _mcount symbol?
该线程尚未退出。如果有的话,你不会看到那么多细节。 (而且可能根本不会看到它。)