Как получить debug_info из трассировки lttng ctf, используя привязки python babeltrace?

Я использую привязки Babeltrace Python3 для чтения трассировки, которая содержит debug_info. Когда я запускаю 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

1 ответ

Решение

Еще нет. Это возможно с привязками Python Babeltrace 2, после построения соответствующего графика обработки и его запуска, но эта основная ревизия не выпущена на эту дату (предварительная стадия).

В Babeltrace 1 есть хак для отладочной информации, в которой text выводит "внедряет" виртуальные поля во время печати, но до этого они недоступны, поэтому вы не можете получить к ним доступ e['func'], например.

Ваша лучшая ставка на данный момент - создать babeltrace Подпроцесс CLI и одна строка вывода за раз, используйте регулярное выражение, чтобы найти нужные поля. Уродливо, но это то, что доступно сегодня.

Другие вопросы по тегам