我试图在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只是坐在那里"等待连接"

推荐答案

PyCharm(或您 Select 的ide)充当"服务器",而您的应用程序是"客户端";因此您首先启动服务器-告诉IDE"调试"-然后运行客户端-这是一些包含settrace语句的代码.当您的python代码达到settrace时,它将连接到服务器-pycharm-并开始向其提供调试数据.

要实现这一点,请执行以下操作:

1. copy the 100 library to the remote machine

所以我不得不将文件从C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg复制到我的linux机器上.我估计是/home/john/api-dependancies/pycharm-debug.egg

2. Put the egg in the PYTHONPATH

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

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

这是必要的,因为我仍然没有成功安装鸡蛋.这是我的变通办法.

3. setup the debug server config

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

  • Run-> Edit Configurations: opens the 'Run/Debug Configurations' dialog
  • Defaults -> "Python Remote Debug": is the template to use
  • 填写本地主机名和端口,您可能会想要"使用路径映射",但下面将详细介绍所有这些内容……
  • "好的"

    Local host name:表示server的名称-在我的例子中是Windows主机-或者实际上是Windows主机的IP地址,因为我的远程计算机不知道主机名.因此,虚拟机(远程)必须能够访问主机.pingnetstat对这个很好.

    Port:可以是任何你喜欢的空的非特权港口.21000不太可能被使用.

    现在不要担心路径映射.

4. Start the debug server

  • Run-> Debug : start the debug server - choose the configuration you just created.

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

 Starting debug server at port 21000

这意味着ide调试服务器正在等待您的代码打开到它的连接.

5. Insert the code

这在单元测试中起作用:

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

6. Open the firewall

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

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

7. Set a breakpoint and run the code

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

Connected to pydev debugger (build 107.386)

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

8. Mappings

映射告诉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

完成.

Django相关问答推荐

Djnago admin中 Select 字段的自定义查询

Django-admin 显示decorator 按多列排序

如何创建复杂的查询?| ChartJS 和 Django

我如何获得已循环的每个项目的名称?

如何使用邮箱确认码创建django注册

Django 按月分组并按月显示在模板中

lower() 在 None 上被调用

如何在 django 的列表中查找所有对象作为对象?

Django中的左外反向select_related?

Django Calendar日历小部件?

如何迭代模板中 SelectField 的选项?

Ruby on Rails 会影响网页的外观吗?

Python/Django:从 values_list() 创建一个更简单的列表

在 django 模板中访问元组

Django ModelChoiceField optgroup 标签

Celery - 在一台服务器上运行不同的工作人员

如何在 Django/Python 中减go 两个日期?

Django:如何将数据保存到 ManyToManyField?

在 Django 中的字段中添加额外的约束

Django - 在设置中使用反向 url 映射