跳转到Python交互式会话中期程序?

Jia*_*aro 12 python eclipse debugging breakpoints pydev

嘿,我想知道...我正在使用带有eclipse的pydev,我真的很享受强大的调试功能,但我想知道:

是否可以在eclipse中设置断点并在执行期间跳转到交互式python解释器?

我认为这将非常方便;)

编辑:我想强调一下,我的目标不是跳进调试器.pydev/eclipse有一个很好的调试器,我可以看看回溯并设置断点.

我想要的是在执行期间执行脚本并跳转到交互式python解释器,这样我就可以做...

  • 闲逛
  • 检查事物的价值
  • 操纵变量
  • 在我将它添加到应用程序之前找出一些代码

我知道你可以使用调试器完成所有这些工作,但是我可以在交互式解释器中更快地完成它,因为我可以尝试一些东西,看到它不起作用,并尝试其他东西而不必让应用程序回到执行点那个代码又来了.

Dar*_*hop 9

因此,从OP的问题大约一年后,PyDev内置了这个功能.我不确定这个功能何时推出,但我所知道的是我花了最后~2小时谷歌搜索......配置iPython等等(其中)看起来它会完成这项工作),但只是意识到Eclipse/PyDev有我想要的ootb.

一旦你在调试模式下遇到一个断点,控制台就在那里准备就绪并等待!我没有注意到这一点,因为没有提示或闪烁的光标; 我错误地认为这是一个标准的,仅限输出的控制台......但事实并非如此.它甚至还有代码完成功能.

很棒的东西,请参阅http://pydev.org/manual_adv_debug_console.html了解更多详情.


rz.*_*rz. 6

这是来自一个旧项目,我没有写它,但它做了类似于你想要使用ipython的东西.

'''Start an IPython shell (for debugging) with current environment.                    
Runs Call db() to start a shell, e.g.                                                  


def foo(bar):                                                                          
    for x in bar:                                                                      
        if baz(x):                                                                     
            import ipydb; ipydb.db() # <-- start IPython here, with current value of x (ipydb is the name of this module).
.                                                                                      
'''
import inspect,IPython

def db():
    '''Start IPython shell with callers environment.'''
    # find callers                                                                     
    __up_frame = inspect.currentframe().f_back
    eval('IPython.Shell.IPShellEmbed([])()', # Empty list arg is                       
         # ipythons argv later args to dict take precedence, so                        
         # f_globals() shadows globals().  Need globals() for IPython                  
         # module.                                                                     
         dict(globals().items() + __up_frame.f_globals.items()),
         __up_frame.f_locals)
Run Code Online (Sandbox Code Playgroud)

由Jim Robert编辑(问题所有者):如果将上述代码放入my_debug.py为此示例而调用的文件中.然后将该文件放在python路径中,并且可以在代码中的任何位置插入以下行以跳转到调试器(只要从shell执行):

import my_debug
my_debug.db()
Run Code Online (Sandbox Code Playgroud)