我正在尝试使用 Babeltrace 1 检查 LTTNG 事件日志中的某个事件链。使用 Babeltrace 集合加载 LTTNG 日志:
import babeltrace
my_collection = babeltrace.TraceCollection()
my_collection.add_traces_recursive(trace_path, 'ctf')
我正在寻找的特殊事件与正在发生的正常事件几乎没有区别,除了链已经开始后还有一些额外的事件。所以我需要寻找这些特殊事件,然后向后搜索真正的开始。
问题是 Babeltrace 只让我在事件列表中前进。简单的解决方案似乎是在我自己的列表中创建事件的克隆:
events = [e for e in my_collection.events]
这样做的问题是列表中的所有事件现在都引用了最后一个事件。这表明 Babeltrace 一遍又一遍地重用同一个对象,并且生成器只返回对该单个对象的引用。
我试过使用copy.copy
:
events = [copy.copy(e) for e in my_collection.events]
这没有帮助,而且copy.deepcopy
根本不起作用。我也试过itertools.tee
:
events = list(itertools.tee(my_collection.events))
但这会返回一个_tee
不能用作正确事件对象的对象列表。
有没有办法使用 Babeltrace 事件集合生成器向后搜索?或者有没有办法正确克隆事件对象以创建我自己的列表?