2013-03-01 5 views
8

pomyśleć o tym scenariuszu:debugowanie z pycharm Jak krok w projekcie, bez wchodzenia django bibliotek

debugować mojego projektu Django i krok za pomocą kodu (i obecnie). Debugger czasami wchodzi do bibliotek Django lub innych zewnętrznych bibliotek.

Czy ktoś wie, jak zapobiec wprowadzeniu kodu zewnętrznego przez debugger? Lub przynajmniej "duży" krok, aby przywrócić debuggera do kodu projektu?

+2

umieścić punkt przerwania w kodzie i biegnie do niego. – duffymo

+0

Przechodzenie przez wywołanie metody do biblioteki nie działa? –

+0

spójrz tutaj: http: // stackoverflow.com/questions/11966276/ignore-exceptions-throw-and-caught-inside-a library –

Odpowiedz

0

Wszystko wygląda tak samo dla debuggera, nie może odróżnić kodu lub kodu Django - to wszystko Python. Tak więc wszystko będzie działać, jednak jeśli chcesz przestać tak słabo wiercić, będziesz musiał "przeskakiwać" linie kodu, zamiast "wchodzić" w nie.

Zgodnie z PyCharm docs będziesz chciał użyć F8, gdy zobaczysz linię kodu, która wygląda na to, że może być bramą do wewnętrznych elementów Django. Jeśli przypadkowo znajdziesz się w kodzie źródłowym Django, możesz uderzyć w numer Shift+F8, dopóki go nie stracisz.

+2

Dzięki chłopaki za odpowiedzi! Rzeczywiście Shift + F8 jest tym, czego użyłem do tej pory, po prostu okazało się to nużące i stratą czasu. Chociaż od czasu do czasu patrzę na kod Django, przez większość czasu patrzę na mój projekt. Może to będzie funkcja w przyszłych wersjach PyCharm. – Dan

+0

Nie będzie to funkcja w przyszłych wersjach, ponieważ nie jest potrzebna. Punkty przerwań i przekraczanie linii kodu już to rozwiązują. – Matt

+2

* Nie można rozróżnić kodu lub kodu Django * Ustawiając punkt przerwania, określasz gdzie debugger ma się zatrzymać. Jak myślisz, dlaczego nie ma sposobu, aby powiedzieć debuggerowi, gdzie nie ma przestać? Zobacz pytanie [Jak skonfigurować program Qt Creator i/lub gdb, aby podczas debugowania mojego programu przy użyciu bibliotek Qt debugger unikał wchodzenia do plików źródłowych Qt?] (Http://stackoverflow.com/q/1448426/95735), który pokazuje, że istnieje taki mechanizm w 'gdb'. Jeśli jeden debugger ma tę funkcję, inne debuggery też mogą ją mieć. –

6

Czy ktoś wie, jak zapobiec wprowadzeniu kodu zewnętrznego przez debugger?

Tak, Dmitrij Trofimov knows;

(...) dodać moduły nie chcesz prześledzić do dict DONT_TRACE w <pycharm-distr>/helpers/pydev/pydevd.py
To hacky rozwiązanie (...)

Jeśli chcesz tę funkcję do być mniej hacky można głosować na niego, odwiedzając WYDANIE
PY-9101 Implement "Do not step into the classes" option for Python debugger


korzystający PDB może być zainteresowany, aby wiedzieć, że istnieje taka funkcja w pdb;

Począwszy od Pythona 3.1, Pdb klasa ma nowy argument o nazwie skip -

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

pomijania argumentem, jeśli podane, musi być iterable z glob-style wzory moduł nazw. Debugger nie przejdzie do ramek, które pochodzą z w module, który pasuje do jednego z tych wzorów. 1

1 czy ramka jest uważany za pochodzące z pewnego modułu jest określa __name__ w globalnych ramy.

Podany przykład w docs pokazuje sposób pominąć pakiety Django -

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