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