Skocz do zawartości
SylwekB

HELP!! Jak znajdujecie bugi w C?

Rekomendowane odpowiedzi

Cześć.

Potrzebuję pomocy.

Jak znajdujecie bugi w programach?

Napisałem program w C, który ma działać 24/7 - program przetwarza obraz z kamery. Niestety raz na kilka dni się wysypuje i to za każdym razem w innym miejscu. Zrobiłem debug build i nic-działa ale wolno :(

 

W tym programie jest mnóstwo operacji na grafice, na tablicach itd, wycinanie fragmentów obrazu itd. Próbowałem to przejrzeć, ale chyba nie dam rady tego znaleźć.

Wiem, że wcześniej znalazłem taki błąd, wtedy komp wysypywał się częściej - o jeden for za daleko. Zapisywało zbyt dużo efekt był taki sam tzn wysypywało się w różnych miejscach, chociaż błąd był w jednym.

 

Pytanie macie jakieś swoje narzędzia do jakiegoś solidnego analizowania np. alokacji pamięci i naruszeń.

Myślałem, aby uruchomić Garbage Collector pod C, co jeszcze polecacie?

 

Pozdr Sylwek

PS. To ostatni program w C (przynajmniej cały), polecam OCaml.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Debug build sie nie uzywa do dzialajacego programu. Jak cos dziala na debug a na release nie to znaczy ze jest w tym blad bo debug build robi zabezpieczenia typu zapas przed i po tablicy.

Nie mozesz w rzaden sposob stwierdzic kiedy sie wywala, jaki jest stan systemu przy wywaleniu? Garbage collector nic pewnie nie pomoze, chyba ze wiesz ze wywala sie z braku pamieci.

Jesli prog jest megawielki i chodzi tak dlugo ze debugu sie nie da zrobic to musisz przerobic program i napisac go porzadnie. Rozwal go na moduly i funkcje, przetestuj po kolei dokladnie funkcje tak by byc pewnym (ale w 100%) ich dzialania. Z tych elementow zloz system. W srodku sprawdzaj *wszystko*, nawet rzeczy ktore teoretycznie nie moga sie zdarzyc (np. rob zawsze cos w default po swich, jesli jest if ktory "musi" sie spelnic to i tak rob else i badaj czy tam nie weszlo, sprawdzaj parametry funkcji na poprawnosc zakresow itd). Mozesz uzywac assert zaleznie od tego jakiego srodowiska uzywasz.

A na koniec pamietaj ze obecnie gdzies 70% czasu powstawania softu to testowanie wiec uzbroj sie z cierpliwosc ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Poza wyzej opisanym i jak najbardziej poprawnym rozumowaniem mozesz zawsze pisac logi do pliku. Logi ladujesz przed i po kazdym co po ciekawszym miejscem w kodzie. + zawsze na poczatku i koncu odpalenia wlasnej funkcji z wypiska (w zakresie mozliwosci) parametrow wejsciowych i wyjsciowych. Po kolejnej wywrotce systemu grzecznie przegrzenbiesz sobie ostatnie 500-800K i przy odrobinie szczescie (i duzej ilosci logow) pewnie dojdziesz co sie wywala. Powodzenia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

8) ech nie wiem pod czym to pisałeś,ale o garbatym zapomniał. Użyłbym BCB++ a wnim jest opcja CodeGuard, on w zasadzie wyłapuje wszystkie wycieki pamięci, a poza tym to już koledzuy napisali , LOG'i i jeszcze raz LOG'i oraz sprawdzanie

pozdrówka

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...