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

2024-05-23 21:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在PyCharm(在windows主机上)和运行django应用程序的debian虚拟主机之间进行调试。说明中说要安装egg,添加导入,然后调用命令。我想这些事情需要在debian主机上完成?

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

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

我试着把它放在背景里,但是得到了这样的东西。。。

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只是坐在那里“等待连接”


Tags: djangoinpydebugimporttrueeggport
3条回答

实际上,它只是一个便条,但包含一些可以节省时间的信息。

  1. 现在pip install pydevd为我在ubuntu和centos 6上工作
  2. 如果要真正调试位于防火墙后面的远程服务器,可以使用以下技巧:

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

这允许远程代码连接到本地主机上侦听的计算机:8081

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

似乎出于某种原因,调试器无法使用PyCharm连接到您的windows主机。你没有别的短信吗?如果没有,请尝试再次运行它,但使用sterrToServer=false。这可能显示了它不连接的真正原因。

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。把鸡蛋放进Python体内

希望您能理解,除非python能够找到鸡蛋,否则您将无法使用它。我想大多数人都使用easy_install,但在我的例子中,我明确地添加了以下内容:

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

这是必要的,因为我仍然没有成功安装鸡蛋。这是我的解决办法。

3。设置调试服务器配置

在PyCharm中,您可以通过以下方式配置调试服务器:

  • 运行编辑配置:打开“运行/调试配置”对话框
  • 默认值“Python Remote Debug”:是要使用的模板
  • 填写本地主机名和端口,您可能会希望“使用路径映射”,但在下面的所有内容。。。
  • “好的”

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

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

    现在不要担心路径映射。

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地址。港口是你的选择,只要你告诉皮查姆在同一个港口听。我发现suspend=False的问题比默认值少,不仅立即停止,因此您不确定它是否正常工作,而且还试图流到stdin/out,这可能会给您带来悲伤。

6个。打开防火墙

默认情况下,Windows7防火墙将阻止您的传入连接。在远程主机上使用netstat,您将能够看到SYN_SENT从未建立,至少在为应用程序“pycharm”向windows防火墙添加异常之前是这样。

OS/X和Ubuntu没有要punch抛出的防火墙(默认情况下,可能有人稍后应用了一个)。

<强>7。设置断点并运行代码

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

Connected to pydev debugger (build 107.386)

在“调试器”选项卡下,变量堆栈将开始工作,您可以单步执行代码。

8个。映射

映射告诉pycharm在哪里可以找到源代码。所以当调试器说“我正在运行file/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

完成。

相关问题 更多 >