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

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

【问题讨论】:

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

标签: c++ linux multithreading gdb shared-libraries


【解决方案1】:

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

(gdb) info threads

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

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

(gdb) thread apply all bt -3

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

【讨论】:

  • 谢谢(我只使用了没有选项的 bt 来查看整个 bt),它帮助我验证了一些线程,但有时输出不清楚(从 boost 中调用某些东西的函数名)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多