Python (pdb) - очередь команд для выполнения - PullRequest
3 голосов
/ 08 апреля 2010

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

Некоторые функции, которые я хотел быдля реализации требуется, чтобы я управлял pdb из кода , в то время как Я нахожусь в контексте 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();

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

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

1 Ответ

4 голосов
/ 08 апреля 2010

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

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. Вы также можете посмотреть их исходный код.

...