Jak uruchomić zdalne debugowanie za pomocą PyCharm?
Próbuję uzyskać debugowanie pomiędzy PyCharm (na Hostie windows) a wirtualnym hostem Debiana z moją aplikacją django. Instrukcje mówią, aby zainstalować jajko, dodać import, a następnie wywołać polecenie. Zakładam, że te rzeczy muszą być zrobione na hoście Debiana?
Ok, więc w jakim pliku powinienem umieścić te dwie linie?
from pydev import pydevd
pydevd.settrace('not.local', port=21000, stdoutToServer=True, stderrToServer=True)
Próbowałem umieścić go w settings.py ale mam takie rzeczy...
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
Podczas gdy pycharm siedział tam " czekając na połączenie "
3 answers
PyCharm (lub Twoje ide z wyboru) działa jako "serwer", a Twoja aplikacja jest "klientem"; więc najpierw uruchom serwer - powiedz IDE, aby 'debug' - a następnie uruchom klienta - który jest kodem z settrace
Instrukcja w nim. Gdy twój kod Pythona trafi w settrace
, łączy się z serwerem pycharm i zaczyna podawać mu dane debugowania.
Aby tak się stało:
1. skopiuj bibliotekę pydev
do zdalnej maszyny
Więc musiałem skopiować plik z C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg
do mojej maszyny z Linuksem. I put it at /home/john/api-dependancies/pycharm-debug.egg
2. Umieścić jajko w PYTHONPATH
Mam nadzieję, że docenisz, że nie będziesz w stanie użyć jajka, dopóki python go nie znajdzie. Myślę, że większość ludzi używa easy_install, ale w moim przypadku dodałem go wyraźnie, umieszczając to:
import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')
Jest to konieczne tylko dlatego, że wciąż nie udało mi się zainstalować jajka. To moje obejście.
3. konfiguracja serwera debugowania config
W PyCharm można skonfigurować serwer debugowania poprzez:
- Run-> Edytuj konfiguracje : otwiera okno dialogowe "Uruchom/Debuguj konfiguracje"
- Defaults - > "Python Remote Debug": jest szablonem do użycia
- wypełnij nazwę lokalnego hosta i portu, a prawdopodobnie będziesz chciał "użyć mapowania ścieżek", ale więcej na ten temat poniżej...
-
"OK"
Nazwa lokalnego hosta : oznacza nazwę Serwer - w moim przypadku jest to maszyna hostująca windows - a właściwie adres IP komputera hostującego windows, ponieważ nazwa hosta nie jest znana mojej maszynie zdalnej. Tak więc wirtualna (zdalna) maszyna musi być w stanie dotrzeć do hosta.
ping
inetstat
są do tego dobre.Port: Może być dowolnym wolnym portem, który lubisz. eg:
21000
jest mało prawdopodobne, aby być w użyciu.Na razie nie martw się mapowaniem ścieżki.
4. Start the debug server
- Run-> Debug : uruchom serwer debugowania-wybierz konfigurację, którą właśnie utworzyłeś.
Pojawi się zakładka debug console i powinieneś otrzymać
Starting debug server at port 21000
W konsoli, co oznacza, że serwer debugowania ide czeka, aż Twój kod otworzy połączenie z nim.
5. Wstaw kod
To działa wewnątrz testu jednostkowego:
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"
A w aplikacji internetowej django to trochę wybredny co do tego gdzie go umieściłeś - wydaje się działać dopiero po wszystkim innym:
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)
Ponownie, że adres IP to pole, na którym uruchamiasz Pycharm; powinieneś być w stanie pingować ten adres ip z pola uruchamiającego Twój kod/stronę internetową. Port jest twoim wyborem, po prostu upewnij się, że powiedziałeś pycharm, aby nasłuchiwał na tym samym porcie. I znalazłem suspend=False
mniej problematyczne niż domyślne, nie tylko natychmiast zatrzymuje się, więc nie jesteś pewien, czy to działa, ale także próbuje streamować na stdin / out, co może również przysporzyć ci smutku.
6. Otwórz firewall
Zapora systemu Windows 7 domyślnie blokuje połączenie przychodzące. Używając netstat na zdalnym hoście będziesz mógł zobaczyć, że SYN_SENT nigdy nie zostanie ustanowiony, przynajmniej dopóki nie dodasz wyjątku Do Zapory systemu windows dla aplikacji "pycharm".
OS / X i Ubuntu nie mają firewalli do dziurkowania (domyślnie ktoś mógł zastosować później).
7. Ustaw punkt przerwania i uruchom kod
Po tym wszystkim, kiedy wszystko pójdzie zgodnie z planem, możesz ustawić punkt przerwania-gdzieś po uruchomieniu settrace - i konsola pycharm pokaże
Connected to pydev debugger (build 107.386)
I w zakładce 'Debugger' stos zmiennych zacznie działać i możesz przejść przez kod.
8. Mappings
Mapowanie informuje pycharm, gdzie może znaleźć kod źródłowy. Więc kiedy debugger mówi "uruchamiam linię 393 plików /foo/bar/nang.py Pycharm może przetłumaczyć tę odległą ścieżkę absolutną na absolutną ścieżkę lokalną... i pokaże Ci kod źródłowy.
/Users/john/code/app/ /opt/bestprice/app/
/Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages
Zrobione.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 04:11:38
To tylko notatka , ale zawiera pewne informacje, które mogą zaoszczędzić wiele godzin.
- Teraz
pip install pydevd
pracował dla mnie zarówno na ubuntu i centos 6 - Jeśli chcesz naprawdę debugować zdalny serwer, który stoi za firewallami i takimi tam, możesz użyć następującej sztuczki:
Ssh-r 8081: localhost: 8081 [email protected]
Pozwala to na zdalne połączenie kodu z Twoim komputerem nasłuchującym na localhost:8081
- If remote debugger nie chce się uruchamiać, mówiąc, że nie może znaleźć portu gniazda, sprawdź reguły zapory. Zauważ, że reguła z "127.0.0.1" nie jest taka sama jak"localhost".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 15:28:43
Wydaje się, że z jakiegoś powodu debugger nie mógł połączyć się z hostem windows za pomocą PyCharm. Nie masz innych wiadomości w stderr? Jeśli nie, spróbuj uruchomić go jeszcze raz, ale za pomocą sterrToServer = false. To może pokazać prawdziwy powód, dla którego się nie łączy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-10 17:17:48