如何使用 babeltrace python 绑定从 lttng ctf 跟踪中获取 debug_info?
How do I get debug_info from lttng ctf trace using babeltrace python bindings?
我正在使用 Babeltrace python3 绑定来读取包含 debug_info 的 lttng ust 跟踪。当我从 shell 运行 Babeltrace 时,我在输出中看到 debug_info:
[13:28:29.998652878] (+0.000000321) hsm-dev lttng_ust_cyg_profile:func_exit: { cpu_id = 1 }, { ip = 0x4008E5, debug_info = { bin = "a.out@0x4008e5", func = "foo+0" }, vpid = 28208, vtid = 28211 }, { addr = 0x4008E5, call_site = 0x400957 }
从 python 绑定中我可以获得其他事件字段(cpu_id、ip、addr、call_site...)但是我在尝试访问 debug_info, bin 或 func.
import babeltrace
collection = babeltrace.TraceCollection()
collection.add_traces_recursive('lttng-traces/a.out-20170624-132829/', 'ctf')
for e in collection.events:
if e.name == 'lttng_ust_cyg_profile:func_entry':
print(e['addr'])
print(e['func'])
Traceback (most recent call last):
File "fields.py", line 9, in <module>
print(e['func'])
File "/usr/lib/python3/dist-packages/babeltrace.py", line 865, in __getitem__
raise KeyError(field_name)
KeyError: 'func'
有没有办法从 Python 获取这些字段?
我正在使用 Babeltrace 1.5.2
还没有。在构建适当的处理图并 运行 之后,使用 Babeltrace 2 Python 绑定是可能的,但是这个主要修订版在这个日期(前期)还没有发布。
Babeltrace 1 中有一个调试信息的 hack,其中 text
在打印时输出 "injects" 虚拟字段,但在此之前它们不可用,所以这就是你无法访问的原因e['func']
,例如
目前最好的办法是创建一个 babeltrace
CLI 子进程,一次一行输出,使用正则表达式查找所需的字段。丑陋,但这就是今天可用的。
我正在使用 Babeltrace python3 绑定来读取包含 debug_info 的 lttng ust 跟踪。当我从 shell 运行 Babeltrace 时,我在输出中看到 debug_info:
[13:28:29.998652878] (+0.000000321) hsm-dev lttng_ust_cyg_profile:func_exit: { cpu_id = 1 }, { ip = 0x4008E5, debug_info = { bin = "a.out@0x4008e5", func = "foo+0" }, vpid = 28208, vtid = 28211 }, { addr = 0x4008E5, call_site = 0x400957 }
从 python 绑定中我可以获得其他事件字段(cpu_id、ip、addr、call_site...)但是我在尝试访问 debug_info, bin 或 func.
import babeltrace
collection = babeltrace.TraceCollection()
collection.add_traces_recursive('lttng-traces/a.out-20170624-132829/', 'ctf')
for e in collection.events:
if e.name == 'lttng_ust_cyg_profile:func_entry':
print(e['addr'])
print(e['func'])
Traceback (most recent call last):
File "fields.py", line 9, in <module>
print(e['func'])
File "/usr/lib/python3/dist-packages/babeltrace.py", line 865, in __getitem__
raise KeyError(field_name)
KeyError: 'func'
有没有办法从 Python 获取这些字段?
我正在使用 Babeltrace 1.5.2
还没有。在构建适当的处理图并 运行 之后,使用 Babeltrace 2 Python 绑定是可能的,但是这个主要修订版在这个日期(前期)还没有发布。
Babeltrace 1 中有一个调试信息的 hack,其中 text
在打印时输出 "injects" 虚拟字段,但在此之前它们不可用,所以这就是你无法访问的原因e['func']
,例如
目前最好的办法是创建一个 babeltrace
CLI 子进程,一次一行输出,使用正则表达式查找所需的字段。丑陋,但这就是今天可用的。