Mam wielowątkową aplikację Python działającą na serwerze Linux. Mogę używać Debug Server PyDev do zdalnej debugowania, co wydaje się bardzo cennym źródłem debugowania. Istnieje jednak pewien problem, który uniemożliwia mu bycie tak pomocnym, jak bym chciał.Uzyskiwanie PyDev zawiesza pracę z wątkami innymi niż MainThread
Podczas gdy moja aplikacja jest uruchomiona na serwerze, mogę przejść do Eclipse na drugim polu, zawiesić MainThread, uzyskać ładny ślad stosu, który był w tym czasie, a następnie wznowić wykonywanie. Wspaniale. Jednak, gdy próbuję tego na jednym z wątków potomnych, przycisk zawieszania jest wygaszony, ale nie ma śladu stosu i wszystko działa normalnie. W oknie debugowania widzę, że jest to wątek potomny i jego PID, ale nie można go kontrolować ani sprawdzać, do czego służy. Kliknięcie prawym przyciskiem myszy i wypróbowanie pomocniczo brzmiącego "stosu kopii" daje mi tylko "wątek 4 - pid29848_seq5".
Punkty przerwań działają poprawnie. Jeśli wątek podrzędny uderza w jedno z nich, mogę przejrzeć i obejrzeć zmienne i takie. Jednak użycie tego skutecznie wymaga, że już mam określony punkt zainteresowania w kodzie. Naprawdę bardziej zależy mi na uruchomieniu aplikacji, a gdy stanie się nietypowy, użyj PyDev, aby zobaczyć, co się dzieje.
Czy mam problem z konfiguracją? Czy to tylko ograniczenie dla PyDev, z którym jestem przeciwko? Jak mogę sprawdzić, co się dzieje z wątkami potomnymi?
Mam ten sam problem. Eclipse, PyDev, Django, serwer zdalny za pomocą polecenia run.py runserver --noautoreload. Bez powodzenia, nie mogę ustawić punktu przerwania w żadnym z widoków. –
Więc dodałem time.sleep (10000) do jednej z metod pobierania widoku mojego kodu Pythona, a PyDev nie ma widocznego stosu, widzę wątek, ale nie ma stosu. –
Tak więc dotarłem do punktu, w którym mogłem zobaczyć stos wewnątrz wątków, dodając: pydevd.settrace (suspend = False) tuż przed punktem przerwania, w dowolnym miejscu w wątku, zanim kod z punktem przerwania zrobi , ale nie wiem, dlaczego jest to potrzebne, ponieważ zgodnie z własnymi dokumentami Pythona dla settrace() "Ustaw funkcję śledzenia dla wszystkich wątków uruchomionych z modułu threading.". Będzie się nad tym zastanawiać. –