Отладка GAE в инструментах Python для Visual Studio
Я могу запустить приложение Google App Engine webapp2 с помощью инструменты Python для Visual Studio 2012 без проблем после в этом уроке, и даже шаг через код инициализации сервера, но я не могу заставить его сломать методы get или post при загрузке веб-сайта, аналогично тому, что показано в видео С main()
метод. Когда я приостанавливаю отладчик, он всегда заканчивается следующим бесконечным циклом в wsgi_server.py:
def _loop_forever(self):
while True:
self._select()
def _select(self):
with self._lock:
fds = self._file_descriptors
fd_to_callback = self._file_descriptor_to_callback
if fds:
if _HAS_POLL:
# With 100 file descriptors, it is approximately 5x slower to
# recreate and reinitialize the Poll object on every call to _select
# rather reuse one. But the absolute cost of contruction,
# initialization and calling poll(0) is ~25us so code simplicity
# wins.
poll = select.poll()
for fd in fds:
poll.register(fd, select.POLLIN)
ready_file_descriptors = [fd for fd, _ in poll.poll(1)]
else:
ready_file_descriptors, _, _ = select.select(fds, [], [], 1)
for fd in ready_file_descriptors:
fd_to_callback[fd]()
else:
# select([], [], [], 1) is not supported on Windows.
time.sleep(1)
можно ли установить точки останова в приложении Google App Engine webapp2 в PTVS, которые запускаются при загрузке страницы из localhost?
Edit: используя настройки cprcrack, я смог успешно запустить GAE, но при загрузке главной страницы я получаю ошибку
Traceback (most recent call last):
File "C:Program Files (x86)Googlegoogle_appenginegoogleappenginetoolsdev_appserver.py", line 3003, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:Program Files (x86)Googlegoogle_appenginegoogleappenginetoolsdev_appserver.py", line 2862, in _Dispatch
base_env_dict=env_dict)
File "C:Program Files (x86)Googlegoogle_appenginegoogleappenginetoolsdev_appserver.py", line 719, in Dispatch
base_env_dict=base_env_dict)
File "C:Program Files (x86)Googlegoogle_appenginegoogleappenginetoolsdev_appserver.py", line 1797, in Dispatch
self._module_dict)
File "C:Program Files (x86)Googlegoogle_appenginegoogleappenginetoolsdev_appserver.py", line 1648, in ExecuteCGI
app_log_handler = app_logging.AppLogsHandler()
File "C:Pythonliblogging__init__.py", line 660, in __init__
_addHandlerRef(self)
File "C:Pythonliblogging__init__.py", line 639, in _addHandlerRef
_releaseLock()
File "C:Pythonliblogging__init__.py", line 224, in _releaseLock
_lock.release()
File "C:Pythonlibthreading.py", line 138, in release
self.__count = count = self.__count - 1
File "C:Pythonlibthreading.py", line 138, in release
self.__count = count = self.__count - 1
File "C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEExtensionsMicrosoftPython Tools for Visual Studio.0visualstudio_py_debugger.py", line 557, in trace_func
return self._events[event](frame, arg)
File "C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEExtensionsMicrosoftPython Tools for Visual Studio.0visualstudio_py_debugger.py", line 650, in handle_line
if filename == frame.f_code.co_filename or (not bound and filename_is_same(filename, frame.f_code.co_filename)):
File "C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEExtensionsMicrosoftPython Tools for Visual Studio.0visualstudio_py_debugger.py", line 341, in filename_is_same
import ntpath
File "C:Pythonlibntpath.py", line 8, in <module>
import os
File "C:Pythonlibos.py", line 120, in <module>
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
ImportError: cannot import name curdir
эта ошибка возникает, потому что мне нужно откатиться к Python 2.5, чтобы использовать старый dev_appserver?
4 ответов
обновление кажется, что gcloud preview теперь устарел, он вернулся к старому методу
чтобы он работал для предварительного просмотра gcloud (он новее и проще), замените это:
Общие->Запуск Файл:
C:\Program Files\Google\Cloud SDK\google-cloud-sdk\lib\googlecloudsdk\gcloud\gcloud.py
Debug - >Аргументы Скрипта:
preview app run app.yaml --python-startup-script "pydevd_startup.py" --max-module-instances="default:1"
rest совпадает с оригинальным ответом:
ОРИГИНАЛЬНЫЙ ОТВЕТ:
наконец-то работает: Для форматирования помогите увидеть здесь, просто скопируйте и вставьте:
создайте файл для внедрения удаленного отладчика
создать новый файл python "pydevd_startup.py"
-
вставить это:
import json import sys if ':' not in config.version_id: # The default server version_id does not contain ':' sys.path.append("lib") import ptvsd #ptvsd.settrace() equivalent ptvsd.enable_attach(secret = 'joshua') ptvsd.wait_for_attach()
сохранить его в рабочем каталоге вашего приложения
- для получения дополнительной информации посмотрите на pytool remote debuging docu, о котором я упоминал выше
изменить настройки проекта в VS
теперь откройте настройки проекта в VS и введите следующее:
General->Startup File: C:\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py
General->Working Directory: .
Debug->Search Paths: C:\Cloud SDK\google-cloud-sdk\lib
Debug->Script Arguments: --python_startup_script=".\pydevd_startup.py" --automatic_restart=no --max_module_instances="default:1" ".\app.yaml"
вы могли бы также использовать .
вместо <path-to-your-app>
но я хотел быть в безопасности.
Запустить Отладчик
С Ctrl+Ф5 вы запускаете отладчик без отладки. Это звучит странно, но мы на самом деле не отлаживаем прямо сейчас, просто запускаем dev-сервер, который запускает наш скрипт, чтобы ввести код отладчика и ждать нашего удаленный отладчик для подключения, что произойдет на следующем шаге
Запустить Удаленный Отладчик
DEBUG->Attach to Process <Ctrl+Alt+P>
Qualifier: tcp://joshua@localhost:5678 <ENTER>
Иисус - ваш секретный ключ. Если вы хотите изменить его (и вы должны), вы также должны изменить его в pydevd_startup.py - ... См. ссылку pytool для получения дополнительной информации.
есть обходной путь, но я не знаю, как получить эту работу на инструменты Python для и в теории это должно быть возможно.
https://groups.google.com/forum/#!topicsearchin/google-appengine/Boa/google-appengine/-m00Qz4Vc7U
вам, вероятно, понадобится это руководство, чтобы заставить его работать:
я использую старый dev_appserver для отладки, и он работает для меня в сценарии, подобном вашему. Я также получил кучу исключений, но я смог просто пропустить все из них, следуя инструкциям на этой ссылке (мне также пришлось добавить "исключения" для некоторых исключений ValueError).
это мои свойства проекта:
вкладка "Общие":
Запуск Файл: C:\Program Files (x86)\Google\google_appengine\old_dev_appserver.py
Рабочий Каталог: ./
приложение Windows: (незарегистрированный)
Интерпретатор: Python 2.7
отладку вкладке:
Поиск Пути: C:\Program Files (x86)\Google\google_appengine
Скрипт Аргументы: --use_sqlite ./
переводчик Аргументы: (пусто)
Переводчик Путь: C:\Python27\python.exe
когда нет необходимости в точках останова, я запускаю проект с DEBUG > Execute Project в Python Interactive. Таким образом, вы не получите ненужную консоль окно.