gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:33:44 36 4
gpt4 key购买 nike

我正在尝试在 PyCharm(在 Windows 主机上)和运行我的 django 应用程序的 debian 虚拟主机之间进行调试。说明说安装鸡蛋,添加导入,然后调用命令。我认为这些事情需要在 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(或您选择的 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 可以找到它,否则您将无法使用egg。我想大多数人都使用easy_install,但在我的例子中,我通过放置以下内容明确添加了它:

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

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

3.设置调试服务器配置

在 PyCharm 中,您可以通过以下方式配置调试服务器:
  • 运行-> 编辑配置:打开“运行/调试配置”对话框
  • 默认值 -> “Python 远程调试”:是要使用的模板
  • 填写本地主机名和端口,您可能想要“使用路径映射”,但更多内容如下...
  • “好的”

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

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

    现在不用担心路径映射。

  • 4、启动调试服务器
  • Run-> 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 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比默认值问题更少,不仅会立即停止,因此您不确定它是否正常工作,而且还会尝试流式传输到 stdin/out,这也可能会让您感到悲伤。

    6.打开防火墙

    默认情况下,Windows 7 防火墙会阻止您的传入连接。在远程主机上使用 netstat,您将能够看到 SYN_SENT 永远不会变为 ESTABLISHED,至少在您为应用程序“pycharm”向 Windows 防火墙添加异常(exception)之前不会。

    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

    完毕。

    关于python - 如何使用 PyCharm 启动远程调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989965/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com