当运行 python 脚本并使用 ipdb 设置断点时,我得到了一个非常奇怪的输出,如下程序所示:
\n\nimport sys\nimport ipdb\nparents, babies = (1, 1)\nwhile babies < 100:\n ipdb.set_trace()\n print 'This generation has {0} babies'.format(babies)\n ipdb.set_trace()\n parents, babies = (babies, parents + babies)\n
Run Code Online (Sandbox Code Playgroud)\n\n第一次运行脚本时一切正常,在第一个断点处停止并打印所有变量。但是,一旦我接近第二个断点,无论我是单步执行还是继续,我都会在控制台中输出这些奇怪的字符:
\n\nC:\\pythontest>python ipdb_test2.py\n> c:\\pythontest\\ipdb_test2.py(6)<module>()\n 5 ipdb.set_trace()\n----> 6 print 'This generation has {0} babies'.format(babies)\n 7 ipdb.set_trace()\n\nipdb> n\nThis generation has 1 babies\n> c:\\pythontest\\ipdb_test2.py(7)<module>()\n 6 print 'This generation has {0} babies'.format(babies)\n----> 7 ipdb.set_trace()\n 8 parents, babies = (babies, parents + babies)\n\nipdb> n\n> \xe2\x86\x90[1;32mc:\\pythontest\\ipdb_test2.py\xe2\x86\x90[0m(8)\xe2\x86\x90[0;36m<module>\xe2\x86\x90[1;34m()\xe2\x86\x90[0m\n\xe2\x86\x90[1;32m 6 \xe2\x86\x90[1;33m \xe2\x86\x90[1;32mprint\xe2\x86\x90[0m \xe2\x86\x90[1;34m'This generation has {0} …
Run Code Online (Sandbox Code Playgroud) 我正在使用Spyder进行python编程.我使用debugfile(F7)命令/函数时遇到问题.一旦进入ipdb提示符,我就没有自动完成功能,向上箭头操作(对于命令历史记录)不起作用.
当我在终端上使用IPython时(我在MacOS上)一切正常.
我使用macport安装了Spyder,ipdb和IPython.当我尝试使用anaconda安装时,会出现同样的问题.
你知道发生了什么吗?
谢谢
就像在 matlab 中一样,Jupyter 中是否有可能在调试模式下运行函数,其中执行在断点处暂停,而在运行模式下函数会忽略断点?在一个简单的例子中,比如
from IPython.core.debugger import set_trace
def debug(y):
x = 10
x = x + y
set_trace()
for i in range(10):
x = x+i
return x
debug(10)
Run Code Online (Sandbox Code Playgroud)
我们是否有可能调用该函数以使 set_trace 被忽略并且函数正常运行?
我想要这个的原因是,在我的函数中,我放置了很多设置跟踪,当我只想在没有跟踪的情况下运行时,我需要注释所有设置跟踪。有更容易的方法吗?
在ipdb
使用命令a
或args
打印有关方法提供的参数的信息时。如何获取实际args
变量以便我可以处理提供的数据?
例如,当我有代码时:
class A(object):
def test(*args, **kwargs):
import ipdb; ipdb.set_trace()
A().test('testing arg')
Run Code Online (Sandbox Code Playgroud)
然后在运行代码后我试过:
ipdb> args
args = (<__main__.A object at 0x1007bdf90>, 'testing arg')
kwargs = {}
ipdb> args[0]
args = (<__main__.A object at 0x1007bdf90>, 'testing arg')
kwargs = {}
ipdb>
Run Code Online (Sandbox Code Playgroud) 我有点迷失在这里:
我不能itertools.product
在我的代码中使用.这是unittest setUp
方法的一个突破点:
ipdb> import itertools
ipdb> itertools
<module 'itertools' (built-in)>
ipdb> itertools.product
<class 'itertools.product'>
ipdb> list(itertools.product([2,7], [1,4]))
*** Error in argument: '(itertools.product([2,7], [1,4]))'
Run Code Online (Sandbox Code Playgroud)
我很确定我没有对模块本身做任何奇怪的事情,因为这是在我的代码库中(没有非公开的更改):
$ git grep itertools
simple_wbd/climate.py:import itertools
Run Code Online (Sandbox Code Playgroud)
如果我在Ipython解释器中尝试这个,它工作正常.
In [1]: import itertools
In [2]: list(itertools.product([2,7], [1,4]))
Out[2]: [(2, 1), (2, 4), (7, 1), (7, 4)]
Run Code Online (Sandbox Code Playgroud)
我甚至不知道如何调试这个.你能帮忙的话,我会很高兴.
谢谢.
我正在寻找一种将 quickfix 窗口的内容写入具有特定格式的文件的方法,最好采用易于编写脚本的方式。
我想要实现的是 Vim 和 ipdb 的轻量级集成:
nmap <leader>s :call setqflist([], 'a', {'items': [{'filename': @%, 'lnum':line('.'), 'text':'break'}]})
.pdbrc
使用break file_path:line_number
格式将快速修复的内容写入文件