2013-05-06 13 views
8

Buduję narzędzie do testowania aplikacji ansi c. Po prostu wczytaj kod, przejrzyj wykres przepływu sterowania, uruchom test, zaznacz wszystkie wierzchołki, które zostały trafione. Próbuję samodzielnie zbudować CFG z parsującego kodu. Niestety jest pomieszany, jeśli kod jest zagnieżdżony. GCC daje możliwość pobrania CFG ze skompilowanego kodu. Mogę napisać parser dla jego wyjścia, ale potrzebuję numerów linii do ustawienia punktów przerwania. Czy istnieje sposób na uzyskanie numerów linii podczas wyświetlania wykresu przepływu sterowania za pomocą -fdump-tree-cfg lub -fdump-tree-vcg?Pobieranie wykresu przepływu sterowania z kodu ANSI C

+0

Możliwy duplikat [Narzędzia do uzyskania graficznego wywołania funkcji kodu kodu] (http://stackoverflow.com/questions/517589/tools-to-get-a-pictorial-function-call-graph-of-code) –

Odpowiedz

6

Zrobiłem więcej badań i nie jest trudno uzyskać numery linii dla węzłów. Po prostu dodaj opcję lineno do jednej z tych opcji, aby ją uzyskać. Więc używaj -fdump-tree-cfg-lineno lub -fdump-tree-vcg-lineno. Zajęło mi trochę czasu sprawdzenie, czy te liczby są niezawodne . W przypadku wykresu w etykiecie formatu każdego węzła w jednostce znajdują się dwie cyfry. Są to numery linii początkowej i końcowej części kodu reprezentowanej przez ten węzeł.

15

Na wykresie przepływu kontrolą programu C można spojrzeć na istniejących parsera Pythona do C:

Wykresy połączeń są ściśle powiązanymi konstrukcjami służącymi do sterowania wykresami przepływu. Istnieje kilka metod tworzenia wykresów wywołań (zależności funkcji) dla kodu C. Może to pomóc w postępowaniu z generowaniem wykresu przepływu sterowania. Sposoby tworzenia wykresów zależnościami C:

  • Stosując cflow:

    • Cflow + pycflow2dot + dot (GPL BSD) Cflow jest wytrzymałe, ponieważ może to w kodzie, który nie może zestawiania, np brakujące obejmuje. Jeśli dyrektywy preprocesora są często używane, może być konieczna opcja wstępnego przetworzenia kodu przez opcję --cpp.
    • Cflow + cflow2dot + kropka (GPL v2, v3 GPL, Eclipse Public License (EPL) v1) (zauważ, że cflow2dot potrzebuje ścieżkę mocujący zanim to działa)
    • Cflow + cflow2dot.bash (GPL v2?)
    • Cflow + cflow2vcg (GPL V2 GPL V2)
    • enhanced cflow (GPL V2) z listy, aby wykluczyć symboli z wykresu
  • Stosując cscope:

  • ncc (Cflow podobne)

  • KCachegrind (Przeglądarka zależności KDE)
  • Calltree

następujących narzędzi niestety wymagają, że kod będzie compilable, ponieważ zależą one od wyjścia z gcc:

  • CodeViz (GPL v2) (słaby punkt: wymaga compilable źródło, ponieważ używa gcc do zrzutu plików cdepn)
  • gcc + egypt + kropka (GPL v *, Perl = GPL | Licencja artystyczna, EPL v1) (egypt używa gcc do produkcji RTL, więc kończy się niepowodzeniem dla każdego błędnego kodu źródłowego, lub nawet w przypadku, gdy chce się skupić na pojedynczym pliku z większego projektu, dlatego nie jest zbyt użyteczny w porównaniu do bardziej wytrzymałe cflow opartych toolchains. należy pamiętać, że Egipt ma domyślnie dobre wsparcie dla wyłączeniem połączenia biblioteki z wykresu, aby czystsze.

również wykresy zależnościami plik do C/C++ mogą być tworzone z crowfood.

+0

Graf wywołania nie jest tym, czego potrzebuję. Potrzebuję wizualnych gałęzi w kodzie. Muszę pokazać wszystkim pętle i punkty decyzyjne w kodzie użytkownikowi. Zrobiłem własny parser dla VCG, ale sprawdzę narzędzia, które zamieściłeś. – Eloar

Powiązane problemy