coredumpctl
创建 coredump 后,该实用程序会显示程序的堆栈跟踪。
例如,在 Firefox 核心转储上:
Stack trace of thread 14469:
#0 0x00007f0ac652d3bd pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
#1 0x0000560f2ab95488 _ZN7mozilla6detail21ConditionVariableImpl4waitERNS0_9MutexImplE (firefox)
#2 0x0000560f2ab95646 _ZN7mozilla6detail21ConditionVariableImpl8wait_forERNS0_9MutexImplERKNS_16BaseTimeDurationINS_27TimeDurati>
#3 0x00007f0aba9799f9 n/a (libxul.so)
#4 0x00007f0aba96eb9a n/a (libxul.so)
#5 0x00007f0ac652708c start_thread (libpthread.so.0)
#6 0x00007f0ac5abce7f __clone (libc.so.6)
考虑到这是 C 代码,因此它是编译的,符号并没有直接嵌入到二进制文件中:那么这怎么可能呢?
而且,readelf 在实践中是如何做到的?
(我的猜测,这与嵌入在 ELF 文件中的符号表有关)