0

我是 Linux 跟踪的新手。我有一个多线程 C++ 用户应用程序。线程定期唤醒(通过 o/s 计时器)并在执行一些处理后休眠。我想形象化:

1)当线程开始和停止运行时

2) 线程在哪些内核上运行。

我已将 lttng 和 Trace Compass 安装到 Ubuntu 14.04 LTS 机器上。但我不知道如何使用这些工具来实现我的目标。

我已阅读以下 lttng 文档部分:

http://lttng.org/docs/#doc-tracing-your-own-user-application

为了收集我的跟踪,我必须定义自定义 lttng 跟踪点定义(在跟踪点提供程序头文件中),并将跟踪点插入到我的用户应用程序中,还是有更简单的方法来实现我的目标?

此致

大卫

4

1 回答 1

0

您可以进行内核跟踪,至少启用sched_switch事件,以获取有关哪个线程在哪个 CPU 上运行的信息。在 Trace Compass 中打开此类跟踪并查看控制流视图应该会显示所有线程的状态,因此您可以搜索与您的应用程序对应的那些。

此外,正如您所提到的,您还可以使用用户空间跟踪点来检测您的应用程序。这将允许您跟踪用户空间状态,比仅内核跟踪中的可用状态更进一步。

您可能会对这个示例/教程感兴趣,它展示了如何检测简单的应用程序以及如何编写 Trace Compass 配置文件以图形方式显示应用程序状态。

于 2016-08-29T16:54:54.027 回答