2014-12-11 16 views
6

Jeśli używam debuggera, większość czasu chcę tylko zobaczyć, co robi interpreter w moim kodzie. Chcę przejść przez cały kod frameworka i bibliotek, których używam.Python Debugger obsługujący Black Boxing?

AFAIK to się nazywa Black Boxing.

Jak mogę to zrobić z Pythonem ipdb lub innym debugerem Python?

Wyobraź sobie:

używam ramy ORM, które mogę zaufać, i nie chce do debugowania.

cut_hair_method(orm_object.user) 

Sposób cut_hair_method() jest mój, a ja chcę go debugowania.

Numer orm_object pochodzi ze struktury, której używam. Debugger wkroczy do orm-code i zrobi coś specjalnego, o co mnie nie interesuje. Nie mam sposobu powiedzieć debuggera: nie wskakuj do kodu orm!

Aktualizacja

Na moim przypadku byłoby bardzo łatwo zdecydować, który kod powinien być w czarnej skrzynce i który nie kod: Kod w $VIRTUAL_ENV/src/ nie jest w czarnej skrzynce, wszystko inne jest kod. Z wyjątkiem wyraźnego poinformowania debuggera o czymś innym.

Update2

Mam nazwę "Black Boxing" z tego artykułu: https://hacks.mozilla.org/2013/08/new-features-of-firefox-developer-tools-episode-25/

+0

Każdy dobry debuger będzie zawierał komendy "krok po kroku". Black-Boxing to znacznie więcej niż tylko debugowanie. Black-boxing to idea skupiająca się na testowaniu (a nie debugowaniu) aplikacji. –

+0

Dodałem przykład. AFAIK "krok po kroku" nie jest możliwy wszędzie. – guettli

+1

Zamiast używać polecenia "krok po kroku", jeśli to nie działa - po co ustawiać punkt przerwania w metodzie "cut_hair_method", a następnie uruchomić .... Wydaje mi się, że IDLE IDE miał czarną listę modułów, których nie można przekroczyć , ale wydaje mi się też, że to nie działa zbyt dobrze (kiedy użyłem go kilka lat temu - może się jednak mylę). –

Odpowiedz

4

Pythona klasa bazowa debugger (bdb.Bdb) posiada atrybut .skip, podając listę nazw moduł do pominąć. Możesz podać tę listę, gdy wystąpi debugger lub później. Jeśli chcesz podać listę ujemną (listę modułów, które są twoimi własnymi) lub w inny sposób obliczyć, czy moduł ma zostać pominięty, możesz podklasować klasę debuggera i nadpisać is_skipped_module.