2011-09-13 12 views
5

Podczas debugowania aplikacji C/C++ mogę utworzyć zegarek odlewania adresu do typu wskaźnika, a następnie wyświetlić zawartość struktury, nawet gdy wykracza ona poza zakres. Czy jest możliwe osiągnąć coś takiego w Javie?
Powiedzmy, że jestem w metodzie, dodam zegarek do czegoś takiego "& to", a kiedy porzucę metodę klasy, nadal mogę zobaczyć jej zawartość, mimo że jest poza zakresem?Wywołanie debugowania w Javie - obserwacja zmiennej poza zakresem

Jestem prawie pewien, że odpowiedź na moje pytanie brzmi "nie", więc najbardziej interesuje mnie "Dlaczego nie?" wyjaśnienie. Czy to ograniczenie JVM? Ograniczenie JPDA? Czy istnieje lepsze miejsce do zadawania tak specjalistycznego pytania?

Odpowiedz

1

W C/C++ obserwujesz (obszar wskazywany przez) dowolny wskaźnik, rzutowany na tę zmienną.

W Javie nie ma żadnych wskazówek. Możesz tylko watch zmienną. Poza zasięgiem nie istnieje.

Dlaczego i tak chcesz to obejrzeć? Jeśli umieścisz na nim zegarek, jest on prawidłowo obserwowany, gdy znajduje się w zasięgu.

+0

Obiekty istnieją poza zakresem. Powiedzmy, że mam duży wykres obiektów i skomplikowany algorytm go przetwarzający. Chcę wiedzieć, na którym etapie algorytm modyfikuje określony obiekt na moim wykresie. Chciałbym przejść przez to, mając oko na to, co się dzieje z tym, czym jestem zainteresowany. –

+0

Hmmm..yes, moje zło. Ale musi istnieć jakieś odniesienie, które jest w zakresie, z którego obiekt jest osiągalny. Myślę, że musisz obserwować, używając tego obiektu, który jest zasięgiem, odwiertu do przedmiotu zainteresowania. Widzę, że nie jest to wygodne i czasami nawet nie jest obsługiwane. –

0

Nie można oglądać zmiennej, która nie znajduje się w zakresie.

Możesz jednak obejrzeć ten sam obiekt, jeśli znajdziesz inną zmienną, która go wskazuje.

Nie ma sensu oglądać obiektu, do którego nie ma odniesienia (nie może to w żaden sposób wpłynąć na wykonanie programu, nie można go już zmienić, zostanie zbuforowane, a pamięć zostanie ponownie wykorzystana przez coś zupełnie innego).

Narzędzia do debugowania na poziomie Java nadal pracują nad zarządzaniem pamięcią JVM, więc potrzebne jest prawidłowe odniesienie do obiektu, nie można po prostu zerknąć na przypadkowe obszary pamięci.

+0

Nie sądzę, że rozumiesz pytanie. Obiekt nadal ma odniesienia do niego, ale nie z obecnej klasy, którą przechodzę w tej chwili. Powiedzmy, że przekraczam 20 wywołań metod i chcę zobaczyć, który z nich modyfikuje ten obiekt. –

+0

Myślę, że możesz to zrobić tylko poprzez znalezienie odniesienia, które istnieje w tych 20 metodach (może gdzieś w górze stosu wywołań), a następnie obejrzyj ten. – Thilo

Powiązane problemy