我有带有时间戳的内核函数调用的信息以及它们被调用的顺序,并且可以从中生成一个调用堆栈。但是由于 tracecompass 已经从 lttng 的跟踪输出中显示了调用堆栈,我想知道是否可以将我的数据以它理解的某种格式提供给 tracecompass,以便它可以从我的数据中显示调用堆栈。但找不到调用堆栈采用哪种输入格式。我知道它需要 lttng 的 ctf 格式输出,但这是针对整个跟踪数据而不是堆栈跟踪。
问问题
128 次
1 回答
0
来自 lttng 跟踪的调用堆栈是由状态系统构建的。我不知道他们是如何为 UST 应用程序中的调用堆栈做的。但是在内核的控制流视图中存在类似的外观功能。调用树是由 sched_process_fork 事件生成的。
sched_process_fork: { cpu_id = 1 }, { parent_comm = "bash", parent_tid = 16746, parent_pid = 16746, parent_ns_inum = 4026531836, child_comm = "bash", child_tid = 16970, _vtids_length = 1, vtids = [ [0] = 16970 ], child_pid = 16970, child_ns_inum = 4026531836 }
它们是在一个进程分叉一个新进程时创建的。您可以使用babeltrace以该格式编写一些事件,并尝试从 Trace Compass 中的内核跟踪角度使用控制流视图。
但我认为您应该使用调用堆栈查看 CTF 跟踪的元数据,以了解它们是如何在那里进行的。
希望我能帮上一点忙。
于 2018-06-18T14:25:49.720 回答