Использование IPython в качестве эффективного отладчика

Как я могу встроить оболочку IPython в мой код и получить егоавтоматически отображать номер строки а такжефункция в каком он был вызван?

В настоящее время у меня есть следующие настройки для встраивания оболочек IPython в мой код:

from IPython.frontend.terminal.embed import InteractiveShellEmbed
from IPython.config.loader import Config

# Configure the prompt so that I know I am in a nested (embedded) shell
cfg = Config()
prompt_config = cfg.PromptManager
prompt_config.in_template = 'N.In <\\#>: '
prompt_config.in2_template = '   .\\D.: '
prompt_config.out_template = 'N.Out<\\#>: '

# Messages displayed when I drop into and exit the shell.
banner_msg = ("\n**Nested Interpreter:\n"
"Hit Ctrl-D to exit interpreter and continue program.\n"
"Note that if you use %kill_embedded, you can fully deactivate\n"
"This embedded instance so it will never turn on again")   
exit_msg = '**Leaving Nested interpreter'

# Put ipshell() anywhere in your code where you want it to open.
ipshell = InteractiveShellEmbed(config=cfg, banner1=banner_msg, exit_msg=exit_msg)

Это позволяет мне запускать полноценную оболочку IPython в любом месте моего кода, просто используяipshell(), Например, следующий код:

a = 2
b = a
ipshell()

запускает оболочку IPython в области вызова, которая позволяет мне проверить значенияa а такжеb.

То, что я хотел бы сделать, этоавтоматический запуск следующий код всякий раз, когда я звонюipshell():

frameinfo = getframeinfo(currentframe())
print 'Stopped at: ' + frameinfo.filename + ' ' +  str(frameinfo.lineno)

Это всегда показывает контекст, в котором запускается оболочка IPython, чтобы я знал, какой файл / функцию и т. Д. Я отлаживаю.

Возможно, я мог бы сделать это с декоратором, но все мои попытки пока не увенчались успехом, так как мне нужноipshell() бежатьв первоначальном контексте (так что у меня есть доступ кa а такжеb из оболочки IPython).

Как я могу сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос