Избегайте отслеживания внешней обертки () при отладке сценария Python с помощью sys.settrace ()Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Избегайте отслеживания внешней обертки () при отладке сценария Python с помощью sys.settrace ()

Сообщение Anonymous »

Я строю пользовательский отладчик Python с использованием Sys.SetTrace () для проверки и журнала событий выполнения. Мой скрипт принимает .py ввод параметр и осматривает каждое событие внутри него, используя:

Код: Выделить всё

code_str = wrap_input(INPUT_PATH)
x = compile(code_str, INPUT_PATH, 'exec')

sys.settrace(tracer)
exec(x)
sys.settrace(None)
< /code>
Проблема состоит в том, что Tracer выбирает события из обоих: < /p>

 Фактический код ввода файла и < /li>
 Внешний exec () < /code> Context It.A call encountered in         () at line number 0
Line 1 → {'code_str': ..., 'x': }
Line 5 → {'code_str': ..., 'x': , 'foo': }
// File starts here
A call encountered in         foo() at line number 1
Line 2 → {}
Line 3 → {'x': 5}
A return encountered in         foo() at line number 3
// File ends here
A return encountered in         () at line number 5
< /code>
Я заинтересован только в отслеживании того, что на самом деле происходит  внутри кода ввода файла < /strong>-не внешняя обертка.if frame.f_code.co_filename != INPUT_PATH:
return None
Но, как ни странно, frame.f_code.co_filename равен input_path каждый раз, даже во время начального exec () call (который я хочу игнорировать). Таким образом, этот фильтр не помогает мне различать контекст "< /em> и реальную логику внутри входного файла. < /P>

Вопрос: < /h2>
Как я могу избежать трассировки внешнего исполнителя () < /code>, пока все еще не проходит входным файлом? введен «фактический» код, определяемый пользователем (например, функции во входном файле), а не только оберточный вызов?


Подробнее здесь: https://stackoverflow.com/questions/796 ... -using-sys
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»