Verwendung von IPython als effektiver Debugger

Wie kann ich eine IPython-Shell in meinen Code einbetten und habenautomatisch die Zeilennummer anzeigen undFunktion in dem es aufgerufen wurde?

Ich habe derzeit das folgende Setup, um IPython-Shells in meinen Code einzubetten:

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)

Auf diese Weise kann ich eine vollständige IPython-Shell überall in meinem Code mit nur startenipshell(). Zum Beispiel der folgende Code:

a = 2
b = a
ipshell()

startet eine IPython-Shell im Bereich des Aufrufers, mit der ich die Werte von überprüfen kanna undb.

Was ich tun möchte, ist zuautomatisch ausführen den folgenden Code, wenn ich anrufeipshell():

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

Dies würde immer den Kontext anzeigen, in dem die IPython-Shell startet, damit ich weiß, welche Datei / Funktion usw. ich debugge.

Vielleicht könnte ich das mit einem Dekorateur machen, aber alle meine bisherigen Versuche sind gescheitert, da ich braucheipshell() zu rennenim ursprünglichen Kontext (damit ich Zugriff habe aufa undb aus der IPython-Shell).

Wie kann ich das erreichen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage