我有带有时间戳的内核函数调用信息和它们被调用的顺序,并且可以从中生成调用堆栈。但是由于 tracecompass 已经显示来自 lttng 的跟踪输出的调用堆栈,我想知道我是否可以以它理解的某种格式将我的数据提供给 tracecompass,以便它可以显示来自我的数据的调用堆栈。但是找不到调用堆栈需要哪种输入格式。我知道它需要 lttng 的 ctf 格式输出,但这是针对整个跟踪数据而不是堆栈跟踪。
lttng trace 中的callstack 是由状态系统构建的。我不知道他们是如何为 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 跟踪的元数据,以了解它们在那里是如何进行的。
希望我能帮上一点忙。