2013-03-01 1 views
8

über dieses Szenario denken:Debuggen mit PyCharm, wie in Projekt Schritt, ohne django Bibliotheken Eingabe

ich debuggen mein Django-Projekt und ich Schritt durch den Code (in und out). Der Debugger gibt manchmal Django-Bibliotheken oder andere externe Bibliotheken ein.

Kann jemand verhindern, dass der Debugger externen Code eingibt? Oder zumindest ein 'großer' Schritt, um den Debugger zurück zum Projektcode zu bringen?

+2

einen Haltepunkt in Ihrem Code Setzen und um sie auszuführen. – duffymo

+0

Das Übergehen des Methodenaufrufs zur Bibliothek funktioniert nicht? –

+0

werfen Sie einen Blick hier: http: // Stackoverflow.com/questions/11966276/ignoriere-Ausnahmen-geworfen-und-gefangen-inside-a-Bibliothek –

Antwort

0

Alles sieht gleich aus für den Debugger, es kann nicht zwischen Ihrem Code oder Djangos Code unterscheiden - es ist alles Python. Es wird also alles laufen, aber wenn du verhindern willst, dass es so tief durchdringt, musst du anfangen, Codezeilen zu überspringen, anstatt sie "zu betreten".

Nach dem Sie wollen F8 verwenden, wenn Sie jemals eine Codezeile sehen, die aussieht, als könnte es ein Gateway in Djangos Interna sein. Wenn Sie sich versehentlich in Djangos Quellcode finden, können Sie Shift+F8 erreichen, bis Sie nicht mehr da sind.

+2

Danke Jungs für die Antworten! In der Tat Shift + F8 ist, was ich bisher verwendet habe, fand ich es nur langweilig und Zeitverschwendung. Obwohl ich gelegentlich Djangos Code anschaue, schaue ich mir die meiste Zeit mein Projekt an. Vielleicht wird es ein Feature in zukünftigen Versionen von PyCharm sein. – Dan

+0

Dies wird in zukünftigen Versionen nicht vorkommen, da es nicht benötigt wird. Breakpoints und das Überschreiten von Codezeilen lösen dies bereits. – Matt

+2

* es kann nicht zwischen Ihrem Code oder Django-Code unterscheiden * Indem Sie einen Breakpoint setzen, sagen Sie dem Debugger, wo er anhalten soll. Warum denkst du, dass es keine Möglichkeit gibt, dem Debugger mitzuteilen, wo er nicht aufhören soll? Siehe die Frage [Wie kann ich Qt Creator und/oder gdb so konfigurieren, dass beim Debuggen meines Programms mit Qt-Bibliotheken der Debugger es vermeiden würde, in die Quelldateien von Qt zu gelangen?] (Http://Stackoverflow.com/q/1448426/95735) zeigt, dass es in 'gdb' einen solchen Mechanismus gibt. Wenn ein Debugger diese Funktion hat, können andere Debugger es wahrscheinlich auch haben. –

6

Kann jemand verhindern, dass der Debugger externen Code eingibt?

Ja, Dmitry Trofimov knows;

(...) in Module, die Sie wollen nicht auf die dict verfolgen DONT_TRACE in <pycharm-distr>/helpers/pydev/pydevd.py
dass eine hacky Lösung ist (...)

Wenn Sie diese Funktion wollen weniger hacky Sie es pDB auf es durch den Besuch Ausgabe
PY-9101 Implement "Do not step into the classes" option for Python debugger


Die Verwendung könnte interessieren, stimmen kann, ist eine solche Funktion in pdb;

Beginnend mit Python 3.1, hat Pdb Klasse ein neues Argument genannt skip -

class pdb.Pdb(completekey='tab', stdin=None, stdout=None, skip=None, nosigint=False)

Das Sprung-Argument, wenn angegeben, muss ein iterable von glob-style-Modul Namensmuster sein. Der Debugger tritt nicht in Frames ein, die in einem Modul initiieren, das einem dieser Muster entspricht. 1

1, ob ein Rahmen in einem bestimmten Modul stammt, berücksichtigt wird, ist durch die __name__ in dem Rahmen globals bestimmt.

Das Beispiel in der Dokumentation gegeben zeigt, wie Django-Pakete überspringen -

import pdb; pdb.Pdb(skip=['django.*']).set_trace()