eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingrzadki bład w programie w C++ › Re: rzadki bład w programie w C++
  • Data: 2021-08-23 15:44:34
    Temat: Re: rzadki bład w programie w C++
    Od: Maciek Godek <g...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    poniedziałek, 23 sierpnia 2021 o 14:59:04 UTC+2 r...@g...com napisał(a):
    > Napisałem program w C++. Zawiera błąd którego szczegółów nie znam. Błąd
    (niepoprawne wartości zapisywane do pliku) występuje rzadko, nie wiem w jakich
    okolicznościach. Wstawiłem asercje i testuję, niestety nie udało mi się odtworzyć
    problemu.
    > Jak podejść do problemu, jakiej strategii użyć? Co mogę zrobić poza asercjami?
    Debugowanie nie ma sensu bo błąd występuje zbyt rzadko.

    Strategia, która pozwoli w najprostszy sposób wyeliminować ten "błąd", to uznać go za
    ficzer.

    A tak serio, jeżeli Twoja wiedza o tym błędzie jest tak duża, jak wiedza, którą się
    tu podzieliłeś, odnośnie programu, który napisałeś, to nie widzę wielkich nadziei na
    uporanie się z nim.

    Możesz chociaż napisać:
    - w jaki sposób błąd się objawia
    - jak duży jest program
    - na jakim etapie rozwoju programu pojawił się błąd
    - czy możesz łatwo przepisać program np. na C# albo Javę

    Możesz też poszukać w okolicy jakiegoś kolegi-programisty, usiąść z nim i wspólnie
    przejrzeć kod.

    Rzecz w tym, że jak piszesz w C++ albo C, to możesz łatwo popełnić błąd w rodzaju
    przypadkowego nadpisania obszaru w pamięci, i tego rodzaju błędy są raczej trudne do
    wykrycia.

    Jeden z moich ulubionych to kod w rodzaju takiego czegoś:

    printf("liczba wynosi: "+n);

    Programista wychowany na C# będzie zaskoczony tym zachowaniem, a tymczasem to jest w
    pełni legalny kod w C: do adresu literału znakowego (który sam w sobie jest dość
    losowy) dodajemy jakąś liczbę, która w rezultacie daje nam jakiś inny adres, i spod
    tego adresu próbujemy teraz przekazać argument do funkcji printf.

    Rezultatem jest "nieokreślone zachowanie", czyli może się tak naprawdę zdarzyć
    cokolwiek.

    Czasem pomaga kompilacja kodu z flagami -Wall albo -Wextra - może pomoże wskazać
    miejsce w kodzie, w którym jest jakieś podejrzane użycie języka.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: