Monday, 9 October 2006

Python Remote Debugging in Komodo

上一篇中提到,Xdebug的DBGp协议,也可以用来对非PHP程序进行在线调试。刚好,拿它来试验一下如何对Python程序进行Remote Debugging。

Komodo中的设置,和前面是一样的,设置Preferences - Debugger - Proxy中的,

Listen for debug connections on port: 9000

再选择Debug - Listen for Remote Debugger即可。

接下来要安装DBGp调试模块。在系统的PATH中增加

<komodo-install-directory>\lib\support\dbgp\bin

再增加一个系统环境变量

PYTHONPATH=%PYTHONPATH%;<komodo-install-directory>\lib\support\dbgp
\pythonlib

用实际路径替换上面的<komodo-install-directory>。

在Command Prompt下,测试模块是否安装正常。

python -c "import dbgp.client; print 'ok'"

如果看到ok,那就没有问题,接着就可以开始实际调试。

先拿最简单的abc.py作试验,

from math import sqrt
a = 3
b = 4
c = sqrt( a * a + b * b )
print a, b, c

在命令行中输入,

pydbgp -d localhost:9000 abc.py

切换到Komodo中可以看到,光标停在了第一行,调试已经开始。step in...

这种调试方式,似乎用处不大。普通的程序,在Komodo里面直接调试可能更好。而对于像Pylons这种Web应用程序来讲,还是不能进入Remote Debugging。为了解决这类问题,就需要使用Komodo的DBGp模块所提供的Hard-Code Break方式,来进入调试状态。

在需要进行Debug的py程序中,插入如下代码,

from dbgp.client import brk

...
class HelloController(BaseController):

def index(self):
...

def breakhere(self):
...
brk(host="127.0.0.1", port=9000)
...
return render_response('/myview.myt')

这里,导入Remote Debugging的客户端模块,brk()设置一个Hard-Code Break,调试器指向127.0.0.1:9000。

继续像过去一样,通过Paster来运行Pylons应用程序。现在,访问http://localhost/hello/breakhere。切换到Komodo,这时光标就会停在brk()后面。接下来的故事,就不必说了。

初步试验下来的感觉,Komodo尽管还不是非常完善,但已经能够实现了对Python程序的Remote Debugging,这对研究Python Web Framework会有所帮助。

0 Comments:

Post a Comment

<< Home