gdb - 多线程和共享库

Posted

技术标签:

【中文标题】gdb - 多线程和共享库【英文标题】:gdb - multiple threads and shared libs 【发布时间】:2015-05-26 13:00:43 【问题描述】:

我有一个创建许多线程的程序。我可以使用以下命令检查它:ps -L pid。我也知道一个进程加载了一些共享库。我想知道是否可以检查哪些线程属于选定的共享库。 该过程包含调试符号,我可以使用以下命令附加到它们:sudo gdb -p pid 接下来是什么?

【问题讨论】:

线程属于任何共享库,这使您的问题非常不清楚。您真正想要实现的目标是什么? 请考虑以下示例:我可以使用 htop 检查进程中每个线程的 cpu 使用量。该程序(进程)加载一些共享库。我想找出哪个共享库创建了占用 cpu 时间的线程。 【参考方案1】:

让我们已经附加到一个进程。

(gdb) info threads

将显示当前已知的线程。输出中的最后一列显示了每个线程的最后一个堆栈帧的函数和库。

如果你想查看线程启动例程和它们所属的库,你可以使用:

(gdb) thread apply all bt -3

此命令将为每个线程显示 3 个堆栈帧(从底部开始)。如果您使用的是 pthread 库,那么 start_thread() 之后的函数就是您的启动例程。

【讨论】:

谢谢(我只使用了没有选项的 bt 来查看整个 bt),它帮助我验证了一些线程,但有时输出不清楚(从 boost 中调用某些东西的函数名)。跨度>

以上是关于gdb - 多线程和共享库的主要内容,如果未能解决你的问题,请参考以下文章

DICOM:DICOM开源库多线程分析之“ThreadPoolQueue in fo-dicom”

DICOM:DICOM开源库多线程分析之“ThreadPoolQueue in fo-dicom”

DICOM:DICOM开源库多线程分析之“LF_ThreadPool in DCM4CHEE”

gdb多线程调试

GDB调试实战(10)多线程调试

GDB调试多线程