setTrace () в Python - PullRequest
       23

setTrace () в Python

6 голосов
/ 21 октября 2009

Есть ли способ использовать функцию setTrace () в сценарии, у которого нет определений методов? т.е.

for i in range(1, 100):
    print i

def traceit(frame, event, arg):
    if event == "line":
        lineno = frame.f_lineno
        print "line", lineno

return traceit

sys.settrace(traceit)

так что в идеале я бы хотел, чтобы функция trace вызывалась на каждой итерации / строке кода, выполняемой в цикле. Я сделал это с помощью сценариев, которые ранее имели определения методов, но я не уверен, как заставить его работать в этом случае.

Ответы [ 2 ]

2 голосов
/ 21 октября 2009

Я использую только одну простую синтаксическую строку, чтобы управлять ими всеми:

import pdb; pdb.set_trace()

Поместите его туда, где вы хотите прервать выполнение и начать отладку. Используйте команды pdb (n для следующего, l для списка и т. Д.).

Приветствия

H.

2 голосов
/ 21 октября 2009

settrace () действительно предназначен только для реализации отладчиков. Если вы используете его для отладки этой программы, вам лучше использовать PDB

Согласно документации, settrace () не будет делать то, что вы хотите.

Если вы действительно хотите выполнить построчное отслеживание, взгляните на пакет компилятора, который позволяет вам получить доступ и изменить абстрактное синтаксическое дерево AST, созданное компилятором Python. Вы должны быть в состоянии использовать это для вставки вызовов функции, которая отслеживает выполнение.

...