2012-03-27 15 views
18

Chciałbym użyć interpretera bpython do debugowania. Moje pytanie jest podobne do "Is it possible to go into ipython from code?", które pyta o ipython.Czy można używać bpython jako pełnego debuggera?

Jeśli używasz ipdb.set_trace(), uzyskujesz pełną sesję ipython ze wszystkimi wygodami. Jednak bpdb.set_trace() nie daje mi sesji bpython, to daje mi standardowy debugger pdb.

Czy jest jakiś sposób konfiguracji, aby móc debugować w sesji bpython?

+0

Czy kosztowałoby Cię to bardzo dużo? – Marcin

+0

@Marcin Powinienem wyjaśnić, że 'bpdb.set_trace()' daje mi standardowy debugger 'pdb' – YXD

+0

Więc, czy to jest problem? Jak powstaje z tego pytanie? – Marcin

Odpowiedz

23

Tak, przy użyciu this wrapper, do której można również uzyskać dostęp, dodając do swojego kodu oświadczenie import bpdb. Dodaj bpdb.set_trace() gdzie chcesz złamać, a od pdb tłumacza wprowadzić „B”, aby przejść do sesji bpython wszystko z ramki stosu:

# The MIT License 
# 
# Copyright (c) 2008 Bob Farrell 
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal 
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions: 
# 
# The above copyright notice and this permission notice shall be included in 
# all copies or substantial portions of the Software. 
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
# THE SOFTWARE. 


import pdb 
import bpython 

class BPdb(pdb.Pdb): 
    """ PDB with BPython support. """ 

    def __init__(self): 
     pdb.Pdb.__init__(self) 
     self.rcLines = [] 
     self.prompt = '(BPdb) ' 
     self.intro = 'Use "B" to enter bpython, Ctrl-d to exit it.' 

    def postloop(self): 
     # We only want to show the intro message once. 
     self.intro = None 
     pdb.Pdb.postloop(self) 

    ### cmd.Cmd commands 


    def do_Bpython(self, arg): 
     bpython.embed(self.curframe.f_locals, ['-i']) 


    def help_Bpython(self): 
     print "B(python)" 
     print 
     print ("Invoke the bpython interpreter for this stack frame. To exit " 
       "bpython and return to a standard pdb press Ctrl-d") 


    ### shortcuts 
    do_B = do_Bpython 
    help_B = help_Bpython 

Twoje pytanie wydaje się całkowicie poprawny do mnie!

+1

Cześć, dziękuję za skierowanie mnie do tego, ale to jest po prostu wrapper wokół 'pdb'. Jest zawarty w module 'bpdb'. Kiedy go używam, daje mi po prostu debugger 'pdb' (tzn. Nie podświetla, uzupełnienia, dokumenty itp.). O ile nie robi czegoś innego na twoim komputerze? – YXD

+0

@MrE Wydaje się, że jest to zakres podany dla 'bpython', ale Amjith ma absolutną rację. Aby rozszerzenie 'pdb' było przyjemne jako debugger,' 'pdb ++' jest do zrobienia. :) – MrGomez

+0

po dokładniejszym sprawdzeniu, czytając powyższy kod, z sesji debuggera 'pdb', jeśli wpiszesz" B ", przeskoczysz do sesji' bpython'. Więc oznaczyłem to jako poprawne. – YXD

10

Jeśli szukasz coolerowskiego debuggera, który wykonuje uzupełnianie i podświetlanie składni, możesz chcieć rzucić okiem na pdb ++. http://pypi.python.org/pypi/pdbpp/

enter image description here

To kropla w zastępstwie WPB. Możesz więc nadal używać

import pdb; pdb.set_trace() 

i spowoduje to wyświetlenie monitu pdb ++.

+2

Hej, to jest naprawdę miłe. Nie tak zręczny jak bpython (w trybie interaktywnym), ale wciąż duży i bezbolesny upgrade. – YXD

+1

Zgadzam się, zakończenie nie jest tak niesamowite jak bpython. Podoba mi się lepka funkcja, gdzie kod jest pokazany powyżej i podświetla bieżącą linię, która jest wykonywana. – Amjith

Powiązane problemy