如何启动PyCharm远程debugging?

我试图在PyCharm(在Windows主机上)和运行我的django应用程序的debian虚拟主机之间进行debugging。 说明说安装鸡蛋,添加导入,然后调用一个命令。 我认为这些东西需要在debian主机上完成?

那么,我应该把这两行文件放在哪个文件中?

from pydev import pydevd pydevd.settrace('not.local', port=21000, stdoutToServer=True, stderrToServer=True) 

我试图把它放到settings.py,但得到了这样的事情…

 File "/django/conf/__init__.py", line 87, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/django/utils/importlib.py", line 35, in import_module __import__(name) File "/settings.py", line 10, in <module> pydevd.settrace('dan.local', port=21000, stdoutToServer=True, stderrToServer=True) File "/pycharm-debug.egg/pydev/pydevd.py", line 1079, in settrace debugger.connect(host, port) File "/pycharm-debug.egg/pydev/pydevd.py", line 241, in connect s = StartClient(host, port) File "/pycharm-debug.egg/pydev/pydevd_comm.py", line 362, in StartClient sys.exit(1) SystemExit: 1 

虽然pycharm只是坐在那里“等待连接”

PyCharm(或您select的ide)充当“服务器”,您的应用程序是“客户端”; 所以你首先启动服务器 – 告诉IDE“debugging” – 然后运行客户端 – 这是一些与settrace语句的代码。 当你的python代码碰到settrace它连接到服务器 – pycharm – 并开始为它提供debugging数据。

要做到这一点:

1.将pydev库复制到远程机器

所以我不得不将C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg到我的linux机器上。 我把它放在/home/john/api-dependancies/pycharm-debug.egg

2.把鸡蛋放在PYTHONPATH里

希望你明白,除非python能find它,否则你将无法使用egg。 我想大多数人使用easy_install,但在我的例子中,我明确添加了这个:

  import sys sys.path.append('/home/john/app-dependancies/pycharm-debug.egg') 

这只是因为我还没有成功安装一个鸡蛋。 这是我的解决方法。

3.设置debugging服务器configuration

在PyCharm中,您可以通过以下方式configurationdebugging服务器:

  • 运行 – > 编辑configuration :打开“运行/debuggingconfiguration”对话框
  • 默认 – >“Python远程debugging”:是要使用的模板
  • 填写本地主机名和端口,你可能会想'使用path映射',但更多的这一切在下面…
  • “好”

    本地主机名称 :意味着服务器的名称 – 这是我的情况下的Windows主机 – 或者实际上是Windows主机的IP地址,因为远程机器不知道主机名。 所以虚拟(远程)机器必须能够到达主机。 pingnetstat对此netstat

    端口 :可以是您喜欢的任何空闲的非特权端口。 例如: 21000不太可能被使用。

    现在不要担心path映射。

4.启动debugging服务器

  • 运行 – > debugging :启动debugging服务器 – select刚刚创build的configuration。

debugging控制台选项卡将出现,你应该得到

  Starting debug server at port 21000 

在控制台,这意味着IDEdebugging服务器正在等待您的代码打开连接到它。

5.插入代码

这在unit testing中工作:

 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地址。 该端口是你的select,只要确保你已经告诉pycharm听同一端口。 而且我发现suspend=False比默认的问题更less,不仅立即停止,所以你不确定它是否正常工作,而且还试图stream到stdin / out,这也可能会给你带来悲伤。

6.打开防火墙

默认情况下,Windows 7防火墙会阻止您的传入连接。 在远程主机上使用netstat,你将能够看到SYN_SENT永远不会成为ESTABLISHED,至less直到你为应用程序'pycharm'的windows防火墙添加一个exception。

OS / X和Ubuntu没有防火墙(默认情况下,稍后有人可能会应用)。

7.设置断点并运行代码

毕竟,当一切都按计划进行时,您可以在settrace运行后的某个地方设置一个断点,并且pycharm控制台将会显示

 Connected to pydev debugger (build 107.386) 

并在“debugging器”选项卡下的variables堆栈将开始工作,你可以通过代码。

8.映射

映射告诉pycharm在哪里可以find源代码。 所以当debugging器说“我正在运行文件/foo/bar/nang.py的第393行,Pycharm可以将该远程绝对path转换为绝对本地path…并显示源代码。

 /Users/john/code/app/ /opt/bestprice/app/ /Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages 

完成。

实际上,这只是一个说明,但包含一些可以节省数小时的信息。

  1. 现在pip install pydevd在我的Ubuntu和pip install pydevd 6上工作
  2. 如果你想真正debugging远程服务器,这是后面的firewals和东西,你可以使用以下技巧:

ssh -R 8081:localhost:8081 user@remote-server.com

这允许远程代码连接到监听localhost:8081的计算机

  1. 如果远程debugging器不想启动,说它找不到套接字端口,请检查您的防火墙规则。 请注意,“127.0.0.1”的规则与“localhost”不一样。

似乎由于某种原因debugging器无法连接到您的Windows主机与PyCharm。 你没有在stderr中有任何其他的消息? 如果没有,请尝试再运行一次,但是使用sterrToServer = false。 这可能显示它没有连接的真正原因。