21

我已经安装IPython(0.13.1)并安装了,我在脚本中ipdb(0.7)插入了该行并运行. 现在我在 ipdb 提示符下,有一些自动补全(例如一个裸标签),但它与我进入 IPython 时得到的自动补全不同。然后(导入后)在 ipdb 提示符中没有像在 IPython 中那样给我一个属性列表。如何使用 ipdb 获得与 IPython 中相同的选项卡完成?import ipdb;ipdb.set_trace()python my_script.pyrequests.<tab>

顺便说一句,当我运行python -m ipdb my_script.py选项卡完成时,就像在 IPython 中一样,但它的缺点是它从第一行而不是我放置的行启动调试器import ipdb;ipdb.set_trace()

4

5 回答 5

6

我在使用virtualenv的 Mac 上ipython==0.13.2ipdb==0.7内部也遇到了同样的现象。Python 2.7.5当我尝试调试时,我有内置的选项卡完成,但不是当前范围内的变量。我发现,我有一个自定义.pdbrc位于我的主文件夹(http://docs.python.org/2/library/pdb.html#id2)。在我将所有内容注释掉后,选项卡完成再次起作用。

我不知道我何时以及为什么添加此文件,但这就是其中的内容:

# See http://docs.python.org/2/library/pdb.html#id2 for the structure of this file.
import pdb

# 'inspect x' will print the source code for a method, class or function.
alias inspect import inspect;print inspect.getsource(%1)
alias i import inspect;print inspect.getsource(%1)
# 'help x' opens the man-style help viewer from the interpretter on an object
alias help !print help(%1)
alias h !print help(%1)
# For ordinary Python objects, ppo will pretty-print members and their values.
alias ppo pp %1.__dict__
# ppio runs ppo over a sequence of objects
alias ppio pp [a.__dict__ for a in %1]

# This tries to enable tab-completion of some identifiers.
!import rlcompleter
!pdb.Pdb.complete = rlcompleter.Completer(locals()).complete

# Taken from https://gist.github.com/1125049
# There are a couple of edge cases where you can lose terminal
# echo. This should restore it next time you open a pdb.
!import termios, sys
!termios_fd = sys.stdin.fileno()
!termios_echo = termios.tcgetattr(termios_fd)
!termios_echo[3] = termios_echo[3] | termios.ECHO
!termios_result = termios.tcsetattr(termios_fd, termios.TCSADRAIN, termios_echo)

需要进一步的研究来检查是什么破坏了那里的制表符完成......

于 2013-08-06T09:22:43.103 回答
4

我有同样的问题,我用以下方法解决了它:

sudo pip install --upgrade ipdb ipython readline

如果您还没有readline安装,请确保libncurses5-dev按照@musashi14 的建议安装。

于 2017-02-09T10:06:25.743 回答
3

easy_install readline帮助吗?

于 2013-02-28T01:23:29.997 回答
3

我在 ubuntu 14.04 上遇到了同样的问题,并通过以下方式解决了这个问题:

apt-get install libncurses5-dev

pip install --upgrade readline

于 2016-08-12T18:19:11.730 回答
2

截至2019-11年,一些事情发生了变化,所以这里应该解决它:

pip install --upgrade ipdb gnureadline ptpython

# Handly to enable ipdb on pytest exceptions
export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
于 2019-11-27T12:01:47.177 回答