如何确保调试配置中没有pdb调用?

时间:2011-08-11 14:37:30

标签: python django git pdb

你有什么建议摆脱生产软件上的pdb调用? 就我而言,我正在开发一个django网站。

我不知道我是否应该:

  • 来自settings.py的Monkey patch pdb(依赖于DEBUG boolean)。
  • 为我们的项目创建一个pdb包装器,如果DEBUG = True则显示set_trace或print basic log
  • 不赞成在git hooks上做准备......(如果你认为最好的想法是怎么做的?)。

3 个答案:

答案 0 :(得分:3)

第三个。您必须执行一些提交规则。例如,在提交之前运行一系列测试等。这样,开发人员可以通过一种简单的方法来检查pdb中断是否仍然存在。如果某人提交了set_trace,他必须为团队的其他成员烘烤蛋糕。

这在我公司很好用: - )

编辑:您可以将此方法作为CDD(Cake Driven Developpement)提交给您的老板

答案 1 :(得分:1)

最好的选择是拥有一个广泛的测试套件,并在推送到生产之前运行测试。无关的pdb断点将阻止测试通过。

如果你不能这样做,那么选项2是最好的:编写一个实用程序来打入调试器,并使其对设置状态敏感。您仍然必须解决如何确保人们使用包装器而不是原始pdb调用的问题。

答案 2 :(得分:0)

理想情况下,您不应该首先包含调试代码。您可以改为使用设置断点并调用主程序进行调试的包装器,以便主程序根本不包含实际的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()")

示例:


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