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”