2013-04-12 6 views
7

(pdb) isteminde bir sekme eklemek yerine başka bir şey yapmak için TAB almaya çalışıyorum. Aklımda ne varOtomatik tamamlama ve PDB'de sekme tuşu

böyle here veya here gibi otomatik tamamlama tetikliyor, ancak sekme tuşu pdb için sekmeleri ekleyerek daha başka bir şey yapmaz.

yüzden üstünde:

 
(pdb)var + tabKeyPressed 

ben almak isterdim:

yerine
 
(pdb)variable 

: kurtarmaya

 
(pdb)var[   ] 
+0

dayanarak. –

cevap

4

iPython bu sorun için üçüncü taraf çözümdür. Bazen sadece vanilya Python'a güvenebilirsiniz. Bunun için 2 çözüm buldum.

Per-kabuk çözümü - kullanım modülü 'rlcompleter':

$ python3 

Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 

>>> import pdb 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 

# press tab - but nothing 
(Pdb) str. 
*** SyntaxError: invalid syntax 
(Pdb) --KeyboardInterrupt-- 
(Pdb) c 
>>> import rlcompleter 
>>> pdb.Pdb.complete=rlcompleter.Completer(locals()).complete 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 
(Pdb) str. 
str.__add__(   str.__getattribute__( str.__name__   str.__text_signature__ str.isdigit(   str.rfind(
str.__base__(   str.__getitem__(  str.__ne__(   str.__weakrefoffset__ str.isidentifier(  str.rindex(
str.__bases__   str.__getnewargs__( str.__new__(   str.capitalize(  str.islower(   str.rjust(
str.__basicsize__  str.__gt__(   str.__prepare__(  str.casefold(   str.isnumeric(   str.rpartition(
str.__call__(   str.__hash__(   str.__qualname__  str.center(   str.isprintable(  str.rsplit(
str.__class__(   str.__init__(   str.__reduce__(  str.count(    str.isspace(   str.rstrip(
str.__contains__(  str.__instancecheck__( str.__reduce_ex__(  str.encode(   str.istitle(   str.split(
str.__delattr__(  str.__itemsize__  str.__repr__(   str.endswith(   str.isupper(   str.splitlines(
str.__dict__   str.__iter__(   str.__rmod__(   str.expandtabs(  str.join(    str.startswith(
str.__dictoffset__  str.__le__(   str.__rmul__(   str.find(    str.ljust(    str.strip(
str.__dir__(   str.__len__(   str.__setattr__(  str.format(   str.lower(    str.swapcase(
str.__doc__    str.__lt__(   str.__sizeof__(  str.format_map(  str.lstrip(   str.title(
str.__eq__(   str.__mod__(   str.__str__(   str.index(    str.maketrans(   str.translate(
str.__flags__   str.__module__   str.__subclasscheck__( str.isalnum(   str.mro(    str.upper(
str.__format__(  str.__mro__    str.__subclasses__( str.isalpha(   str.partition(   str.zfill(
str.__ge__(   str.__mul__(   str.__subclasshook__( str.isdecimal(   str.replace(   
(Pdb) c 
>>> 

Sistem çapında çözümü - kullanım dosyası ~/.pdbrc

$ cat ~/.pdbrc 
import rlcompleter 
pdb.Pdb.complete=rlcompleter.Completer(locals()).complete 
$ python3 
Python 3.4.3 (default, Sep 14 2016, 12:36:27) 
[GCC 4.8.4] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pdb 
>>> pdb.set_trace() 
--Return-- 
> <stdin>(1)<module>()->None 
(Pdb) str. 
str.__add__(   str.__getattribute__( str.__name__   str.__text_signature__ str.isdigit(   str.rfind(
str.__base__(   str.__getitem__(  str.__ne__(   str.__weakrefoffset__ str.isidentifier(  str.rindex(
str.__bases__   str.__getnewargs__( str.__new__(   str.capitalize(  str.islower(   str.rjust(
str.__basicsize__  str.__gt__(   str.__prepare__(  str.casefold(   str.isnumeric(   str.rpartition(
str.__call__(   str.__hash__(   str.__qualname__  str.center(   str.isprintable(  str.rsplit(
str.__class__(   str.__init__(   str.__reduce__(  str.count(    str.isspace(   str.rstrip(
str.__contains__(  str.__instancecheck__( str.__reduce_ex__(  str.encode(   str.istitle(   str.split(
str.__delattr__(  str.__itemsize__  str.__repr__(   str.endswith(   str.isupper(   str.splitlines(
str.__dict__   str.__iter__(   str.__rmod__(   str.expandtabs(  str.join(    str.startswith(
str.__dictoffset__  str.__le__(   str.__rmul__(   str.find(    str.ljust(    str.strip(
str.__dir__(   str.__len__(   str.__setattr__(  str.format(   str.lower(    str.swapcase(
str.__doc__    str.__lt__(   str.__sizeof__(  str.format_map(  str.lstrip(   str.title(
str.__eq__(   str.__mod__(   str.__str__(   str.index(    str.maketrans(   str.translate(
str.__flags__   str.__module__   str.__subclasscheck__( str.isalnum(   str.mro(    str.upper(
str.__format__(  str.__mro__    str.__subclasses__( str.isalpha(   str.partition(   str.zfill(
str.__ge__(   str.__mul__(   str.__subclasshook__( str.isdecimal(   str.replace(   
(Pdb) c 
>>> 

Notlar:

  1. Sadece th üzerinde test edilmiştir. e Python 3.4

  2. OS - Linux Mint

  3. Hem kapalı bağlantılar harika çalıştı farklı bir bilgisayarda, benim Python yüklemesiyle şey olmuş gibi görünüyor https://reminiscential.wordpress.com/2009/06/12/python-enable-auto-complete-in-a-pdb-session/

7

ipdb. ihracat fonksiyonları ipdb

sekme tamamlama, dizim, daha iyi tracebacks, Pdb modül aynı arayüzüyle daha iyi iç gözlem özellikleri ipython ayıklayıcısını erişmek için.

+1

Bir süredir denedim ve malları teslim etti. Ben sadece çok düşkün değilim. –