2010-04-08 3 views
2

Я реализую систему «останова» для использования в моей разработке Python, которая позволит мне вызвать функцию, которая по сути вызывает вызовы pdb.set_trace();Python (pdb) - Команды очереди для выполнения

Некоторые функции, которые я хотел бы реализовать, требуют от меня управления pdb из кода while Я в контексте set_trace.

Пример:

disableList = [] 
def breakpoint(name=None): 
    def d(): 
     disableList.append(name) 
     #**** 
     #issue 'run' command to pdb so user 
     #does not have to type 'c' 
     #**** 

    if name in disableList: 
     return 

    print "Use d() to disable breakpoint, 'c' to continue" 
    pdb.set_trace(); 

В приведенном выше примере, как я реализую комментарии демаркированы по #****?

В других частях этой системы я хотел бы выпустить команду «вверх» или две последовательные команды «вверх», не выходя из сеанса pdb (так что пользователь заканчивается в командной строке pdb, но на двух уровнях на стек вызовов).

ответ

4

Вы можете вызывать методы более низкого уровня, чтобы получить больше контроля над отладчике:

def debug(): 
    import pdb 
    import sys 

    # set up the debugger 
    debugger = pdb.Pdb() 
    debugger.reset() 

    # your custom stuff here 
    debugger.do_where(None) # run the "where" command 

    # invoke the interactive debugging prompt 
    users_frame = sys._getframe().f_back # frame where the user invoked `debug()` 
    debugger.interaction(users_frame, None) 

if __name__ == '__main__': 
    print 1 
    debug() 
    print 2 

Вы можете найти документацию для pdb модуля здесь: http://docs.python.org/library/pdb и для интерфейса отладки bdb нижнего уровня здесь: http://docs.python.org/library/bdb. Вы также можете посмотреть исходный код.

Смежные вопросы