PyCharm远程调试-连接但无法启动调试

2024-06-08 19:11:44 发布

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

基础知识:

  • 我有一个django项目运行良好(在本地和远程服务器上)。
  • 我使用“远程调试”配置文件在本地启动pycharm,它看起来很好。

    Starting debug server at port 4000
    Use the following code to connect to the debugger:
    import pydevd
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False)
    Waiting for connection...
    
  • 在远程服务器上,我将对pycharm-debug.egg的适当调用放在__init__.py中(但我也尝试将其放在代码的其他位置)。

  • 我像这样启动远程服务器python manage.py runserver <remote domain name>:8000,然后在本地pycharm IDE/调试器上看到:

    "Connected to pydev debugger (build 133.1347)"
    
  • 在这之后,事情就这样。。。我没有得到任何关于执行情况的反馈,pycharm IDE也没有能力“启动/继续/运行”任何东西。

  • 在远程服务器上,如果我<ctrl-c>看到:

    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1256, in settrace
    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1305, in _locked_settrace
    

我的猜测是所有的东西都连接得很好,但是我没有看到一种方法来启动所有的东西。我有“suspend=False”所以我希望它开始。当我试图针对远程服务器打开一个页面时,我得到“未连接”,因此web服务器显然还没有运行(如果curl http://<remote server domain>:8000我得到curl: (7) Failed connect to <remote server domain>:8000; Connection refused)。如果不进行远程调试,在本地开发人员计算机上或远程服务器上运行都可以。

我做错什么了?:)谢谢!

详细信息:

  • 在运行要在主__init__.py中调试的代码/进程的远程服务器上,我有:

    import os
    import sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR + '/pycharm-debug.egg')
    import pydevd
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False)
    
  • 本地pycharm IDE显示:

    Starting debug server at port 4000
    Use the following code to connect to the debugger:
    import pydevd
    pydevd.settrace('localhost', port=4000, suspend=False)  (tried with <public ip addr> for this, too.
    Waiting for connection...
    ---- and then, after I start the remote server process: ----
    Connected to pydev debugger (build 133.1347)
    

其他说明:

  • 我在远程服务器上尝试过使用或不使用virtualenv。
  • 我正在一个普通的Comcast电缆调制解调器路由器后面运行本地pycharm IDE,端口4000的端口转发已打开(并通过连接到端口4000的节点服务器进行了测试,当我从远程服务器对其进行wget时,该服务器工作正常)。

我不知道如何“碰撞”任何东西来运行并让我开始调试。

谢谢你帮忙。


Tags: thetopathpydebugimport服务器远程
3条回答

对于未来的谷歌用户。。。我可以让远程调试工作,但不是通过这种方法。我刚刚在pycharm论坛上回答了一个类似的问题,所以我想我会用对我有用的方法来更新这个问题。

  1. 转到“PyCharm/Preferences/Project解释程序”。
    • 您将在对话框的顶部看到一个选择哪个python解释器的选项。旁边是一个齿轮图标。如果你点击齿轮图标,你会看到一个选项“添加遥控器”。。。给它ssh凭据(或ssh密钥的路径)和python解释器安装在远程服务器上的路径(即/usr/local/bin/python)。
    • 此外,我的“pycharm helpers路径”是(/home/<username>/.pycharm_helpers-我不记得这是不是自动创建的)。
  2. 转到“运行/编辑配置…”并添加“Django服务器”(对话框左上角的加号)。

    • 选择新的远程python解释器作为要使用的解释器(它应该显示在选项的下拉列表中)。
    • 在“env vars”部分,我需要指定我的主应用设置文件(即DJANGO_SETTINGS_MODULE = <app>/settings.py)。出于我的目的,我还需要设置HTTPS=1
    • 将工作目录设置为django项目在远程服务器上的任何位置(即/home/<username>/<xyz>/<appdir>)。
    • 设置从本地目录到远程目录的路径映射(即/Users/JohnQ/<xyz>/<appdir>=/home/<username>/<xyz>/<appdir>)。

    • 因为我需要其他第三方服务器(如FB等)才能使用HTTPS访问此服务器,所以我在远程服务器上使用了“stunnel”–这很容易设置)。

  3. 除此之外,还可以设置部署确认,以便右键单击以上载文件的较新版本(在“工具/部署/配置…”下)。

    • 创建一个新的,并且在connection下只使用ssh creds或密钥路径。
    • 在“映射”选项卡中,路径与为远程服务器安装程序执行的路径映射相同。
    • “服务器上的Web路径”对我来说只是“/”。创建之后,您应该可以右键单击任何文件/目录并选择“上载到…”。注意,对于初始上载,我只是将tar.gz压缩到服务器上以节省时间,并且我只通过部署配置上载调试期间所做的更改。

我已经很高兴地用它进行了~4个月的远程调试,所以它工作得很好。

对我来说,删除suspend=False参数就做到了。

文件上写着@param suspend: whether a breakpoint should be emulated as soon as this function is called.

如果你让它在那里,它是连接的,但不考虑断点。然后基本上应该使用另一个pydevd.settrace('ip.addr')->;注意不要suspend

我有同样的症状,并通过关闭视图断点窗口中的所有Python异常断点来“修复”它。

相关问题 更多 >