<p>PyCharm(或您选择的ide)充当“服务器”,您的应用程序是“客户机”;因此您首先启动服务器-告诉ide“调试”,然后运行客户机-这是一些包含<code>settrace</code>语句的代码。当您的python代码点击<code>settrace</code>时,它会连接到服务器-pycharm-并开始向它提供调试数据。</p>
<p>要做到这一点:</p>
<p><strong>1。将<code>pydev</code>库复制到远程计算机</strong></p>
<p>所以我不得不将文件从<code>C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg</code>复制到我的linux机器上。我把它放在<code>/home/john/api-dependancies/pycharm-debug.egg</code></p>
<p><strong>2。把鸡蛋放进Python体内</strong></p>
<p>希望您能理解,除非python能够找到鸡蛋,否则您将无法使用它。我想大多数人都使用easy_install,但在我的例子中,我明确地添加了以下内容:</p>
<pre><code> import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')
</code></pre>
<p>这是必要的,因为我仍然没有成功安装鸡蛋。这是我的解决办法。</p>
<p><strong>3。设置调试服务器配置</strong></p>
<p>在PyCharm中,您可以通过以下方式配置调试服务器:</p>
<ul>
<li><em>运行编辑配置:打开“运行/调试配置”对话框</li>
<li><em>默认值“Python Remote Debug”:是要使用的模板</li>
<li>填写本地主机名和端口,您可能会希望“使用路径映射”,但在下面的所有内容。。。</li>
<li><p>“好的”</p>
<p><strong>本地主机名</strong>:表示<em>服务器</em>的名称-在我的情况下是windows主机-或者实际上是windows主机的IP地址,因为主机名不为远程计算机所知。所以虚拟(远程)机器必须能够到达主机。<code>ping</code>和<code>netstat</code>对此很好。</p>
<p><strong>端口</strong>:可以是您喜欢的任何空闲的非特权端口。例如:<code>21000</code>不太可能被使用。</p>
<p>现在不要担心路径映射。</p></li>
</ul>
<p><strong>4。启动调试服务器</strong></p>
<ul>
<li><em>运行调试:启动调试服务器-选择刚创建的配置。</li>
</ul>
<p>“调试控制台”选项卡将出现,您应该</p>
<pre><code> Starting debug server at port 21000
</code></pre>
<p>在控制台中,这意味着ide调试服务器正在等待代码打开到它的连接。</p>
<p><strong>5。插入代码</strong></p>
<p>这在单元测试中起作用:</p>
<pre><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"
</code></pre>
<p>而在django web应用程序中,它的放置位置有点挑剔—似乎只有在完成其他操作之后才能工作:</p>
<pre><code>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)
</code></pre>
<p>同样,IP地址是运行Pycharm的框;您应该能够从运行代码/网站的框中ping该IP地址。港口是你的选择,只要你告诉皮查姆在同一个港口听。我发现<code>suspend=False</code>的问题比默认值少,不仅立即停止,因此您不确定它是否正常工作,而且还试图流到stdin/out,这可能会给您带来悲伤。</p>
<p><strong>6个。打开防火墙</strong></p>
<p>默认情况下,Windows7防火墙将阻止您的传入连接。在远程主机上使用netstat,您将能够看到SYN_SENT从未建立,至少在为应用程序“pycharm”向windows防火墙添加异常之前是这样。</p>
<p>OS/X和Ubuntu没有要punch抛出的防火墙(默认情况下,可能有人稍后应用了一个)。</p>
<p><强>7。设置断点并运行代码</strong></p>
<p>毕竟,当一切都按计划进行时,可以在settrace运行之后的某个地方设置断点,pycharm控制台将显示</p>
<pre><code>Connected to pydev debugger (build 107.386)
</code></pre>
<p>在“调试器”选项卡下,变量堆栈将开始工作,您可以单步执行代码。</p>
<p><strong>8个。映射</strong></p>
<p>映射告诉pycharm在哪里可以找到源代码。所以当调试器说“我正在运行file/foo/bar/nang.py的393行时,Pycharm可以将远程绝对路径转换为绝对路径本地路径。。。给你看看源代码。</p>
<pre><code>/Users/john/code/app/ /opt/bestprice/app/
/Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages
</code></pre>
<p>完成。</p>