Как обеспечить отсутствие вызовов pdb из конфигурации отладки? - PullRequest
3 голосов
/ 11 августа 2011

Что вы предлагаете, чтобы избавиться от вызовов pdb на производственном программном обеспечении?В моем случае я занимаюсь разработкой сайта Django.

Не знаю, стоит ли мне:

  • pdb Monkey patch из файла settings.py (зависит от логического значения DEBUG).
  • Создайте оболочку pdb для нашего проекта, которая отображает set_trace или печатает базовый журнал, если DEBUG = True
  • Dissalow, добавляющий brakpoints на git hooks ... (если вы думаете, что это лучшая идея, как бы высделать это?).

Ответы [ 3 ]

2 голосов
/ 11 августа 2011

Третий.Вы должны применить некоторые правила коммита.Например, запустить серию тестов перед фиксацией и т. Д. Таким образом, разработчики имеют простой способ проверить, остался ли разрыв pdb.Если кто-то совершает set_trace, он должен испечь торт для остальной команды.

Это прекрасно работает в моей компании: -)

edit : вы можетепредставить этот метод вашему боссу как CDD (Cake Driven Developpement)

1 голос
/ 11 августа 2011

Наилучшим вариантом будет иметь обширный набор тестов и запускать тесты перед началом работы. Посторонние pdb контрольные точки будут препятствовать прохождению испытаний.

Если вы не можете этого сделать, тогда лучше всего подойдет вариант 2: напишите утилиту для взлома отладчика и сделайте ее чувствительной к состоянию настроек. Вам все еще нужно решить проблему того, как быть уверенным, что люди используют оболочку, а не простой вызов pdb.

0 голосов
/ 11 августа 2011

В идеале, вы не должны включать код отладки в первую очередь. Вместо этого вы можете использовать оболочку, которая устанавливает точки останова и вызывает основную программу для отладки, так что основная программа вообще не содержит реальных вызовов set_trace().

# foo.py
print "hello"
print "goodbye"

и

#debug_foo.py
import pdb

def run_foo():
    execfile('foo.py')

db = pdb.Pdb()
db.set_break("foo.py", 2)
db.run("run_foo()")

Пример:


<em>[~]$</em> <strong>python foo.py</strong> 
hello
goodbye
<em>[~]$</em> <strong>python foo.py</strong> 
> <string>(1)<module>()
(Pdb) <strong>continue</strong>
hello
> /home/dbornside/foo.py(1)<module>()
-> print "goodbye"
(Pdb) <strong>continue</strong>
goodbye
<em>[~]$</em> 
...