Komodo - смотреть переменные и выполнять код во время паузы в программе

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

Спасибо

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

1 ответ

Решение

Если вы положите

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

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

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

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

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

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
Другие вопросы по тегам