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中,您可以通过以下方式配置调试服务器:
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
完成.