Трассировка пути и номера строки

Я использую питонаtrace модуль для отслеживания некоторого кода. Когда я отслеживаю код таким образом, я могу получить один из следующих двух результатов:

Вызов:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix])
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Результат:

<filename>(<line number>): <line of code>

Вызов [цитата]:

tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix], countfuncs=True)
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)

Результат:

filename:<filepath>, modulename:<module name>, funcname: <function name>

Что мне действительно нужно, так это след, который дает мне это:

<filepath> <line number>

Казалось бы, я мог бы использовать вышеуказанную информацию и чередовать их, чтобы получить то, что мне нужно, но такая попытка потерпит неудачу в следующем случае использования:

sys.path содержит каталогA и каталогB.Есть два файлаA/foo.py а такжеB/foo.pyОбеA/foo.py а такжеB/foo.py содержать функциюbarопределяется по строкам 100 - 120Есть небольшие различия междуA/foo.py а такжеB/foo.py

В этом сценарии используется такое чередование, чтобы правильно определить, какиеbar вызов невозможен (пожалуйста, поправьте меня, если я ошибаюсь) без статического анализа кода вbarчто само по себе очень сложно для нетривиальных функций.

Итак, как я могу получить правильный вывод трассировки, который мне нужен?

Ответы на вопрос(1)

Ваш ответ на вопрос