2010-01-29 30 views
19

Czy istnieje niezbyt zabawne narzędzie, które może utworzyć wykres wywołań całej aplikacji? Nie chodzi mi tylko o uzyskanie obrazu lub rysowanie wykresu wywołań za pomocą wskazywania metody metodą.Graf wywołania całej aplikacji

Potrzebuję grafu wywołania, który jest dostępny programowo, tzn. Narzędzie powinno wypróżnić go do pliku w trybie tekstowym (np. XML) lub zbudować wykres wywołania w pamięci (co staje się problematyczne w przypadku dużych aplikacji). Wykres wywołania wbudowany w DB byłby świetny.

Zarówno statyczne, jak i dynamiczne wykresy połączeń są pożądane; choć statyczny jest nieco bardziej interesujący, to fakt, że jest on nadmiernie powiększony, jest akceptowalny.

Próbowałem Soot do tej pory. Jednak nie jest w stanie obsłużyć nawet projektów średniej wielkości, takich jak FreeCol (dostępne są źródła java). Sadza wyczerpuje 1,5 GB pamięci w tym projekcie, a następnie JVM ulega awarii, jak opisano tutaj: http://www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html

Czy ktoś mógłby zaproponować narzędzie do generowania wykresu połączeń, jak opisano powyżej? Języki Java lub .NET są w porządku.

poważaniem, Sarge

+4

Weź młotek i użyj platformy 64-bitowej i przypisz trochę 6 GB lub cokolwiek do JVM dla Soot ...;) – Lucero

+0

Chcesz grafikę połączeń zbudowaną dla Javy? Dla C? dla ...? Zgaduję, Java, ale twoje odniesienie do C# nazywa to założenie w wątpliwość. –

+0

Lucero, dzięki. BTW, czy JVM jest w stanie obsłużyć więcej niż 2 GB pamięci RAM? W każdym razie, chociaż to rozwiązanie może pozwolić mi stworzyć wykres wywoławczy dla FreeCol, ale dla dużego projektu (np. Alfresco) będzie wymagać 100 GB pamięci RAM itp. To nie jest właściwy sposób. –

Odpowiedz

2

sierżancie,

JProfiler jest przyzwoity java profiler który będzie generował wykres połączeń, jak również pozwala na eksport w formacie XML.

Nie użyłem sadzy, więc nie mogę wypowiedzieć się na temat tego, jak wygląda JProfiler w porównaniu do sadzy, ale oczekuję, że JProfiler wymaga 2,5-3-krotnej pamięci w porównaniu do aplikacji.

+2

Analizator dynamiczny może zbudować tylko część wykresu wywołania, który jest faktycznie wykonywany podczas wykonywania. Aby uzyskać półpełny wykres, musisz bardzo dobrze korzystać z systemu, a biorąc pod uwagę, że większość zestawów testowych osiąga tylko 70-80%, istnieje wiele możliwych połączeń, których po prostu nie ma na liście. Analiza dynamiczna daje "niedoszacowanie". Analizator statyczny (patrz moja odpowiedź) wykreśla wykres wywołania poprzez sprawdzenie kodu. Ponieważ każda bezpieczna analiza musi być konserwatywna, statyczne analizatory dają "przeszacowanie", ale nie brakuje żadnych potencjalnych połączeń. –

+0

OP powiedział, że byłby również zainteresowany narzędziami generowania dynamicznych wywołań połączeń, ale twój punkt jest dobrze zrobiony. – jbranchaud

7

Nasza DMS Software Reengineering Toolkit może tworzyć globalne wykresy połączeń dla C, Java i COBOL. Są one obliczane jako struktura danych w pamięci, a następnie można chodzić, aby zebrać dowolne inne fakty. (Możesz wyeksportować go do jakiegoś innego narzędzia, aby przejść nad nim, ale dla dużego wykresu połączeń czas i wysiłek na wywóz będą dominować w czasie, aby go po prostu analizować, więc nie mamy tendencji do eksportowania go.YMMV.).

Jest stosunkowo łatwo wyodrębnić informacje o wywołaniu z wyciągu z abstrakcyjnej formy "CALL X (...)", ponieważ docelowy X znajduje się właśnie w kodzie w witrynie połączenia. Pośrednie (wywołania wirtualne lub metody) są problematyczne, ponieważ rzeczywiste cele połączeń nie są trywialne w kodzie w witrynie wywołania, ale w rzeczywistości są rozproszone po całym systemie, a co gorsza, kontrolowane przez warunek warunkowy środowiska wykonawczego. W przypadku braku dodatkowych informacji konstruktor wykresu wywołania musi przyjąć, że połączenie pośrednie może przejść do dowolnego celu z pasującym podpisem; wprowadza to wiele fałszywych pozytywnych łuków wywołania na wykresie.

DMS wykorzystuje (konserwatywną) globalną analizę punktów do działania jako część procesu wyodrębniania call-graph, w celu ustalenia, gdzie znajdują się takie połączenia pośrednie, a jednocześnie minimalizuje liczbę fałszywych alarmów. Zobacz więcej przykładów tego, co DMS może wyodrębnić, oraz przykładowy wykres wyodrębniony z systemu 250 000 funkcji.

+0

Ira, powyższy zestaw narzędzi dałby mi wykres przepływu kontrolnego, prawda? Czy zapewnia również wykres zależności od procedury, podobnie jak w gramatech? (http://www.grammatech.com/research/papers/slicing/slicingWhitepaper.html) – Joeblackdev

+0

To nie zapewnia PDG per se. Zapewnia łańcuchy use-def, pełny wykres przepływu sterowania dla każdej metody/funkcji oraz globalny wykres wywołań. Twoje zainteresowanie jest wyraźnie podzielone na Java (określone na podstawie innych interakcji SO); jest tam wystarczająco dużo, aby podzielić Java (używamy tych samych informacji do wycinania C i COBOL). –

+0

Czy to narzędzie jest dostępne bezpłatnie? Czy jest to produkt komercyjny? – Joeblackdev

1

Wyjazd http://semmle.com/

Użyłem ich funkcji, kiedy było w fazie beta. Tworzy bazę danych informacji programowych, które można programowo zapytać. Firma jest startupem, a produkt nie jest już w wersji beta, ale nie mogę znaleźć nigdzie na jego stronie informacji, jak go kupić lub ile kosztuje.

NDepend (http://www.ndepend.com/) to podobne narzędzie dla platformy .NET, którego również używałem, ale nie jestem pewien, czy można uzyskać do niego dostęp programowy.XDepend (http://www.xdepend.com/) jest ich narzędziem do Java, którego nie używałem.

1

1,5 GB to niewiele pamięci na realistyczne wykresy połączeń. Chyba właśnie daje ci to, o co prosisz. Wykresy połączeń za pomocą innych narzędzi mogą być mniejsze, ale najprawdopodobniej będą niekompletne.

+0

Zbudowaliśmy rozsądnie dokładne wykresy połączeń (za pomocą analizy wskaźnika dla wskaźników funkcji) dla systemu z 26 000 jednostek kompilacji, 250 000 funkcji w 32-bitowej przestrzeni adresowej. Wydaje mi się to całkiem realistyczne. Analiza * point-to * wymagała 95-gigabajtowej maszyny wirtualnej. (Tak, GB). –

Powiązane problemy