Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4463197
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: Python/Ruby

2012-04-02 11:38:57

撰写程序时候,需要在调试上面花费不少时间,好的调试工具可以让这个过程如虎添翼, 靠打 log 调试会是一种很痛苦的过程,我总结一下 Pylons 开发的调试技巧。

吐槽:团队开发时候,每个成员需要学习、总结和分享各自的开发技巧, 这样才能自我提升并提高开发效率。这属于团队文化建设,开发是一种艺术创造过程, 绝对不是简单的复制和粘帖。

在 Python 中调试 pdb

在代码中加入下列语句即可启用交互式调试。

1import pdb;pdb.set_trace()

在 pdb 中,可以使用 h / l / b / n / s / c / j / a / p / ! / q 这些命令所代表的含义可以通过 h(elp) 打印出来。

参考链接:

ipdb

比 pdb 更好用的是 ipdb,需要预先安装 IPython,通过 IPython 可以提供更强的交互功能。

安装 ipdb: easy_install ipdb , 使用方法依然是 import ipdb;ipdb.set_trace() 。

ps: 根据我的测试,ipdb 0.61 不能和 ipython 0.91 正常工作, 会报 ImportError: No module named core.debugger 错误,请尝试使用 ipython 0.10 或者更新版本。这个错误在 ipdb 官网有 issue 描述 ()。

使用 embed python shell

除了特定代码的调试,有时候我们还需要在开发一个功能之前进行尝试性代码撰写, 这点在 web 开发时候尤其有用。托 Python 动态语言特性的福,我们可以很方便的使用 Interactivate Shell 进行开发。

在项目的根目录建立一个 Python 脚本,比如 shell.py ,其中代码如下:

01#!/usr/bin/env python
02#coding=utf-8
03 
04# desc: 这个shell提供Python上下文环境,方便调试
05# author: alswl
06# date: 2012-03-20
07 
08def main():
09        # Do something for init here.
10    try:
11        from IPython.frontend.terminal.embed import InteractiveShellEmbed
12        ipshell = InteractiveShellEmbed()
13        ipshell()
14    except ImportError:
15        import code
16        pyshell = code.InteractiveConsole(locals=locals())
17        pyshell.interact()
18 
19if __name__ == '__main__':
20    main()

这段代码先尝试使用 IPython 作为交互 shell,如果没有安装就使用原生 Python 作为 交互 Shell。(强烈建议使用 IPython)。

请在 main() 方法开始时候做一些初始化动作,比如载入 webapp 的实例并初始化各路config, 这样就能实现即时代码测试功能,提高开发效率,不用一遍遍地跑流程。

参考链接

  • (注意, 这篇文章是2011年的,其中引入 IPython 的 InteractiveShellEmbed 的方法已经过期,请参考上面的代码)
GAE 中的 pdb

有一些特定系统,比如 GAE 和 nosetests,他们会重定向 std:in 和 std:out , 造成 pdb 无法正确输入和输出,在使用的使用,需要用以下代码做个 hack。

1import sys
2import pdb
3for attr in ('stdin', 'stdout', 'stderr'):
4    setattr(sys, attr, getattr(sys, '__%s__' % attr))
5pdb.set_trace()
Pylons 调试

Paster 的 Shell 交互式调试更显犀利(官方所称杀手级功能), 可以直接使用 paster shell dev.ini 命令启用交互界面,默认会先尝试载入 IPython,不存在就载入原生 Shell。

我当前使用的 Paster 版本为 1.7.5,无法正确识 IPython 0.11及以上版本, 请使用0.9.1或者0.10。

参考链接:

版权所有 © 2010 转载本站文章请注明: 转载自
原文链接:
您可以随意地转载本站的文章,但是必须在醒目位置注明来源及本站链接,不可以将本站文章商业化使用,或者修改、转换或者以本作品为基础进行创作。
3a1ff193cee606bd1e2ea554a16353ee

阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~