SylwekB Opublikowano 8 Kwietnia 2004 Zgłoś Opublikowano 8 Kwietnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dzi Opublikowano 8 Kwietnia 2004 Zgłoś Opublikowano 8 Kwietnia 2004 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 ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
spicum Opublikowano 8 Kwietnia 2004 Zgłoś Opublikowano 8 Kwietnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Zibi1303 Opublikowano 13 Kwietnia 2004 Zgłoś Opublikowano 13 Kwietnia 2004 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...