Próbuję debugować problem w mojej aplikacji Java, która nie zgłasza żadnych błędów, nie ma wyjątków i nawet nie powoduje awarii aplikacji (wygląda na to, że awaria następuje w osobnym wątku).Jak mogę debugować ciche błędy w aplikacjach Java?
Problem prawdopodobnie pojawia się w wywołaniu funkcji bibliotecznej (to jest JAXBContext.newInstance(String)
, jeśli to ma znaczenie). Program dotrze do linii tuż przed wywołaniem, ale nie do tej tuż po niej. Moje bloki catch
nie są wprowadzane, a program po prostu kontynuuje działanie.
Problem występuje podczas próby renderowania odpowiedzi XML na żądanie sieciowe, które zostało wysłane przez Struts. Żądanie zostało obsłużone, a kod powinien zarządzić obiektem odpowiedzi. Klient otrzymuje odpowiedź od razu (więc kod nie wydaje się zawieszać w pętli), ale jest pusty.
Ustawiłem punkt przerwania tuż przed problematyczną linią, ale debugger po prostu nad nią działa, nie mam pojęcia dlaczego.
Używam Eclipse, a aplikacja działa wewnątrz kontenera OSGi (Apache Felix), który został uruchomiony z -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
. Z poziomu Eclipse I używam ustawień debugowania dla "Remote Java application", aby podłączyć debugger.
Jakie są techniki, aby uzyskać taki problem?
Czy na pewno IDE wskazuje na ten sam kod źródłowy, który tworzy pliki binarne na serwerze? –
Tak, to wszystko na moim lokalnym komputerze, a kontener OSGi uruchamia kod bezpośrednio z katalogu wyjściowego mojego IDE. –
Nie jestem zaznajomiony z kontenerem OSGi, czy to, podobnie jak JBoss, przenosi wdrożone pliki binarne do innego katalogu? Próbowałbym zmienić kod, System.out.println lub coś podobnego, a następnie upewnić się, że zostanie wykonany, aby to potwierdzić. Normalnie znalazłem, że debugger pomijający linie kodu wskazuje, że IDE i serwer nie są zsynchronizowane ze sobą. –