如何使用PyCharm启动远程调试?

时间:2011-08-08 23:56:59

标签: python django remote-debugging pycharm

我正在尝试在PyCharm(在Windows主机上)和运行我的django应用程序的debian虚拟主机之间进行调试。说明说要安装egg,添加导入,然后调用命令。我认为这些事情需要在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只是坐在那里“等待连接”

3 个答案:

答案 0 :(得分:105)

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中,您可以通过以下方式配置调试服务器:

  • 运行 - &GT; 编辑配置:打开“运行/调试配置”对话框
  • 默认 - &gt; “Python远程调试”:是使用的模板
  • 填写本地主机名和端口,您可能想要“使用路径映射”,但更多关于以下所有内容......
  • “OK”

    本地主机名:表示服务器的名称 - 在我的情况下是Windows主机 - 或者实际上是自主机名以来的Windows主机的IP地址我的远程机器不知道。因此,虚拟(远程)机器必须能够到达主机。 pingnetstat对此有好处。

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

    暂时不要担心路径映射。

<强> 4。启动调试服务器

  • 运行 - &GT; Debug :启动调试服务器 - 选择刚刚创建的配置。

将出现调试控制台选项卡,您应该

 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网络应用程序中,你把它放在哪里有点挑剔 - 似乎只有在其他一切完成之后才能工作:

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的问题比默认值少,不仅会立即停止,所以你不确定它是否正常工作,而且还试图流式传输到stdin / out,这也可能让你感到悲伤。

<强> 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

完成。

答案 1 :(得分:9)

实际上,它只是一个注释,但包含一些可能节省数小时的信息。

  1. 现在pip install pydevd在ubuntu和centos 6上为我工作
  2. 如果你想真正调试firewals和东西背后的远程服务器,你可以使用以下技巧:
  3. ssh -R 8081:localhost:8081 user@remote-server.com

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

    1. 如果远程调试器不想启动,说它找不到套接字端口,请检查防火墙规则。请注意该规则与&#34; 127.0.0.1&#34;与&#34; localhost&#34;。
    2. 不同

答案 2 :(得分:1)

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