Komodo - смотреть переменные и выполнять код во время паузы в программе - PullRequest
2 голосов
/ 11 ноября 2009

С помощью c # в Visual Studio IDE я могу в любой момент приостановить выполнение программы и просмотреть ее переменные, проверить все, что захочу. Я заметил, что с IDE Komodo, когда что-то падает, и это останавливает поток программы, я могу сделать то же самое. Но по какой-то причине кажется, что, когда я пытаюсь сделать то же самое, когда я вручную приостанавливаю программу, то же самое не может быть достигнуто. Я делаю что-то не так или это просто невозможно? В последнем случае, кто-нибудь может объяснить мне, почему? Это связано с IDE или с Python?

Спасибо

edit: Другой вопрос, как мне продолжить программу? Из того, что я вижу, после того, как я вызываю code.interact (local = locals ()), он ведет себя так, как программа все еще работает, поэтому я не могу нажать кнопку «Выполнить», только на «Пауза» или «Закрыть».

1 Ответ

3 голосов
/ 11 ноября 2009

Если поставить

import code
code.interact(local=locals())

в вашей программе, тогда вы будете сброшены в интерпретатор Python. (См. Метод, чтобы заглянуть в программу Python, запущенную прямо сейчас )

Это немного отличается от остановки Komodo, но, возможно, вы можете использовать его для достижения той же цели.

Нажатие Ctrl-d выходит из интерпретатора Python и позволяет возобновить работу вашей программы.

Вы можете проверить стек вызовов с помощью модуля трассировки:

import traceback
traceback.extract_stack()

Например, вот декоратор, который печатает стек вызовов:

def print_trace(func):
    '''This decorator prints the call stack
    '''
    def wrapper(*args,**kwargs):
        stacks=traceback.extract_stack()
        print('\n'.join(
            ['  '*i+'%s %s:%s'%(text,line_number,filename)
             for i,(filename,line_number,function_name,text) in enumerate(stacks)]))
        res = func(*args,**kwargs)
        return res
    return wrapper

Используйте это так:

@print_trace
def f():
    pass
...