PyCharm (или ваш идеал выбора) действует как «сервер», а ваше приложение - как «клиент»;поэтому сначала вы запускаете сервер - скажите 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
Надеюсь, вы понимаете, что не сможете использовать яйцо, если питон не сможет его найти.Я предполагаю, что большинство людей используют easy_install, но в моем случае я добавил это явно, добавив следующее:
import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')
Это необходимо только потому, что мне все еще не удалось установить яйцо.Это мой обходной путь.
3.настройка конфигурации сервера отладки
В PyCharm вы можете настроить сервер отладки с помощью:
- Выполнить -> Редактировать конфигурации : открывает диалоговое окно «Run / Debug Configurations»
- Defaults -> «Python Remote Debug»: это шаблон для использования
- для заполнения имени локального хоста и портаи вы, вероятно, захотите «использовать сопоставление путей», но об этом подробнее рассказано ниже ...
"ОК"
Имя локального хоста : означаетимя сервера - в моем случае это хост-компьютер windows - или фактически IP-адрес хост-машины windows, поскольку имя хоста неизвестно моей удаленной машине.Таким образом, виртуальная (удаленная) машина должна быть в состоянии достичь хоста.ping
и netstat
хороши для этого.
Порт : может быть любым свободным непривилегированным портом, который вам нравится.Например: 21000
вряд ли будет использоваться.
Пока не беспокойтесь о путевых отображениях.
4.Запустите сервер отладки
- Выполните -> Отладка : запустите сервер отладки - выберите конфигурацию, которую вы только что создали.
Появится вкладка консоли отладки, и вы должны получить
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 немного привередливо в отношении того, куда вы его положили - похоже, работает только после всегоеще сделано:
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;вы должны иметь возможность пинговать этот IP-адрес из коробки, где запущен ваш код / сайт.Порт - ваш выбор, просто убедитесь, что вы попросили Pycharm прослушивать тот же порт.И я обнаружил, что suspend=False
менее проблематично, чем настройки по умолчанию, не только немедленно останавливает работу, поэтому вы не уверены, работает ли он, но также пытаетесь выполнить потоковую передачу на стандартный вывод / вывод, что также может вызвать у вас горе.
6.Откройте брандмауэр
Брандмауэр Windows 7 по умолчанию заблокирует ваше входящее соединение.Используя netstat на удаленном хосте, вы увидите, что SYN_SENT никогда не становится ESTABLISHED, по крайней мере, пока вы не добавите исключение в брандмауэр Windows для приложения 'pycharm'.
OS / X и Ubuntu doне имеет брандмауэров для перфорации броска (по умолчанию кто-то мог применить один позже).
7.Установите точку останова и выполните код
После всего этого, когда все пойдет по плану, вы можете установить точку останова - где-нибудь после того, как settrace запустится - и консоль pycharm покажет
Connected to pydev debugger (build 107.386)
и на вкладке «Отладчик» начнет работать стек переменных, и вы сможете пошагово выполнить код.
8.Отображения
Отображение сообщает Pycharm, где он может найти исходный код.Поэтому, когда отладчик говорит: «Я запускаю строку 393 файла /foo/bar/nang.py, Pycharm может преобразовать этот удаленный абсолютный путь в абсолютный локальный путь ... и показать вам исходный код.
/Users/john/code/app/ /opt/bestprice/app/
/Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages
Готово.