PyCharm(或您选择的 ide)充当“服务器”,您的应用程序是“客户端”;所以你首先启动服务器——告诉IDE“调试”——然后运行客户端——这是一些带有settrace
语句的代码。当您的 python 代码点击settrace
它时,它会连接到服务器 - pycharm - 并开始向它提供调试数据。
要做到这一点:
1.将库复制pydev
到远程机器
所以我不得不将文件复制C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg
到我的linux机器上。我把它放在/home/john/api-dependancies/pycharm-debug.egg
2.将鸡蛋放入PYTHONPATH
希望您明白除非 python 可以找到它,否则您将无法使用鸡蛋。我想大多数人都使用easy_install,但在我的例子中,我明确地添加了它:
import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')
这只是必要的,因为我仍然没有成功安装鸡蛋。这是我的解决方法。
3.设置调试服务器配置
在 PyCharm 中,您可以通过以下方式配置调试服务器:
4.启动调试服务器
- 运行->调试:启动调试服务器 - 选择您刚刚创建的配置。
将出现调试控制台选项卡,您应该得到
Starting debug server at port 21000
在控制台中,这意味着 ide 调试服务器正在等待您的代码打开与它的连接。
5.插入代码
这在单元测试中有效:
from django.test import TestCase
class APITestCase(TestCase):
def test_remote_debug(self):
import sys
sys.path.append('/home/john/dependancies/pycharm-debug.egg')
from pydev import pydevd
pydevd.settrace('192.168.33.1', port=21000, suspend=False)
print "foo"
在 django web 应用程序中,放置它的位置有点挑剔 - 似乎只有在完成其他所有操作后才能工作:
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
sys.path.append('/vagrant/pycharm-debug.egg')
import pydevd
pydevd.settrace('192.168.33.1', port=21000, suspend=False)
同样,IP 地址是您运行 Pycharm 的地方;您应该能够从运行您的代码/网站的框中 ping 该 IP 地址。端口是你的选择,只要确保你告诉 pycharm 监听同一个端口。而且我发现suspend=False
比默认设置的问题更少,不仅立即停止,因此您不确定它是否正常工作,而且还尝试流式传输到标准输入/输出,这也可能让您感到悲伤。
6.打开防火墙
默认情况下,Windows 7 防火墙将阻止您的传入连接。在远程主机上使用 netstat,您将能够看到 SYN_SENT 永远不会成为 ESTABLISHED,至少在您为应用程序 'pycharm' 添加一个例外到 Windows 防火墙之前是这样。
OS/X 和 Ubuntu 没有防火墙可打(默认情况下,有人可能会稍后应用)。
7.设置断点并运行代码
毕竟,当一切按计划进行时,您可以设置一个断点 - 在 settrace 运行后的某个地方 - pycharm 控制台将显示
Connected to pydev debugger (build 107.386)
在“调试器”选项卡下,变量堆栈将开始工作,您可以单步执行代码。
8. 映射
映射告诉 pycharm 在哪里可以找到源代码。因此,当调试器说“我正在运行文件 /foo/bar/nang.py 的第 393 行时,Pycharm 可以将该远程绝对路径转换为绝对本地路径......并向您展示源代码。
/Users/john/code/app/ /opt/bestprice/app/
/Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages
完毕。