2012-02-23 20 views
8

Posiadam dużą bazę kodową o dość starym kodzie C w systemie wbudowanym i niestety nie ma automatycznych przypadków testowych/pakietów. To sprawia, że ​​kod restrukturyzacji i refaktoryzacji jest niebezpiecznym zadaniem.Wywoływanie funkcji i śledzenie parametrów - przypadek testowy i generowanie próbne

Ręczne pisanie przypadków testowych jest bardzo czasochłonne, więc pomyślałem, że powinno być możliwe zautomatyzowanie przynajmniej części tego procesu, na przykład przez śledzenie wszystkich wywołań funkcji i rejestrowanie wartości wejściowych i wyjściowych. Mogłem następnie użyć tych wartości w przypadkach testowych (nie działałoby to dla wszystkich, ale przynajmniej dla niektórych funkcji). Prawdopodobnie możliwe byłoby również tworzenie fałszywych funkcji na podstawie zebranych danych.

Posiadanie takich przypadków testowych sprawiłoby, że refaktoryzacja byłby mniej niebezpiecznym działaniem.

Czy są jakieś rozwiązania, które już mogą to zrobić? Jaki byłby najłatwiejszy sposób, aby to zadziałało, gdybym sam musiał to zakodować?

Pomyślałem o użyciu ctags, aby znaleźć definicje funkcji i zawinąć je w funkcję rejestrującą wartości parametrów. Inną możliwością jest prawdopodobnie wtyczka kompilatora gcc.

+0

nie myślisz to pytanie należy do superuser.com ... ?? –

+2

@ Mr.32: To jest bardzo związane z programowaniem, więc zdecydowanie należy tutaj. –

Odpowiedz

1

Istnieje opcja gcc "-finstrument-functions", mechanizm, którego można użyć do zdefiniowania własnych wywołań zwrotnych dla każdego wejścia/wyjścia każdej funkcji.

Google to i można znaleźć wiele dobrych przykładów.

[Edytuj] przy użyciu tej funkcji oddzwaniania gcc można śledzić tylko wejście/wyjście funkcji, a nie parametry. ale z kilkoma sztuczkami możesz również śledzić paramy. (przejdź przez bieżący wskaźnik ramki, aby uzyskać parametr na stosie).

Oto rozmowa artykuł o idei realizacji:

http://linuxgazette.net/151/melinte.html

Ponadto zależy od wbudowanego systemu Linux można spróbować czegoś podobnego ltrace pokazać params (jak sposób strace). Istnieje wiele narzędzi do śledzenia funkcji w przestrzeni użytkownika lub jądra systemu Linux, ftrace/ust/ltrace/utrace/strace/systemtap /. W każdym razie, jeśli nie dodasz żadnego twardego kodu debugowania, nie będzie możliwe prawidłowe wyświetlanie parametrów. Jeśli przyjmiesz próbę dodania informacji o debugowaniu wejścia/wyjścia, to jest to znacznie łatwiejsze.

Także tutaj jest podobny wątek mówiący o tym problemie.

Tool to trace local function calls in Linux

+0

Jest to bardzo interesujące, ale niestety nie widzę sposobu, w jaki będę mógł uzyskać dostęp do oryginalnego parametru funkcji i zwracanych wartości. Czy to możliwe z tym rozszerzeniem kompilatora? – trenki

+0

Dzięki. Muszę sprawdzić, czy mogę to zrobić dla procesorów MIPS. – trenki

Powiązane problemy