Proste pomyłki trudne do zdebugowania

Każdemu programiście zdarza się popełnić błąd a czasami jest na tyle banalny a zarazem trudny do zdebugowania, że po jego wykryciu (i poprawieniu) nie wiadomo czy się śmiać czy płakać ;)

Pamiętam jeden taki przypadek który zdarzył się pewnemu programiście (niestety nie mogę odszukać ani przypadku ani programisty ;-p), było to mniej więcej tak:

// miał zdefiniowaną funkcję o podobnej nazwie:
int iteral(...) {
    //...
}

//  a potem używał jej tak
int a = iteral();
int b = iteral();
int c = iteraI();
int d = iteral();

Błąd polegał na tym, że (w przypadku zmiennej c) użył funkcji która nie była zdefiniowana, bo pomylił się w ostatniej literze jej nazwy - zamiast małej litery l użył dużej litery i ;)

Jakie wy znacie pomyłki, które są trudne do debugowania?

2 lata, 3 miesiące temu | edytowane przez: szaman 141111442

  • 2 lata, 3 miesiące temu
    edytowane przez: nilphilus
    Pytanie społeczności

    1

    najpopularniejsze to:

    if(i = 5) { cośtam }
    


    dalej może być coś w rodzaju:

    int i = 10;
    printf("%d %d %d", ++i,++i,++i);
    

    niby się spodziewa człowiek: 11, 12, 13, a tu guzik - tu się tworzy stos i wynik jest zaskakujący, jak ktoś o tym nie wie ;-)
    albo:

    int i = 3,4;
    

    // i będzie miało wartość 4, ponieważ operator przecinka zwraca prawą wartość.

  • 2 lata, 3 miesiące temu
    edytowane przez: gregor
    Pytanie społeczności

    0

    Cześć.

    Jestem programistą aplikacji WEBowych. Dla mnie najgorszy błąd to biała strona ;-) Dobra praktyka nakazuje w środowisku produkcyjnym wyłączyć wywalanie błędów na ekran, do tego serwis w którym jest spory ruch też czasem może mieć wyłączone error-logi (odciążenie dysku ze zbyt dużej ilości operacji IO). W środowisku testowym niby działa, a na produkcji biały ekran - masakra. Przyczyny bywają różne, od zduplikowania nazwy jakiejś metody (to był akurat dziwny przypadek, bo w środowisku testowym było ok) do zwykłego błędu podczas rsync'u aplikacji na serwery www (zgubiony plik).

    Pozdrawiam!

  • 2 lata, 3 miesiące temu
    edytowane przez: MaciejZbrzezny
    Pytanie społeczności

    0

    Cześć,

    polecam przeczytać książkę: 19 grzechów śmiertelnych Jak naprawić najczęstsze usterki oprogramowania, autor: Michael Howard , wyd: Mikom.

    Opisuje popularne (i często trudno do zdebugowania) błędy i dotyczy wielu języków.

    pozdrawiam,

    Maciek

    http://maciej-progtech.blogspot.com/

  • 2 lata, 3 miesiące temu
    edytowane przez: atrawin
    Pytanie społeczności

    0

    To ja miałem taki numer w C++ jak na metodach numerycznych pisaliśmy program obliczający zbieżność szeregu lub rozwiązujący układ równań metodą iteracyjną.

    Należało przyjąć jakąś dolną i górną granicę dokładności tego wyniku, co czyniliśmy oczywiście przez funkcję wartości bezwzględnej ABS.

    Jednak okazuje się, że aby użyć ABS jako funkcji wartości bezwzględnej to trzeba zaimportować sobie math.h ;) a my tego nie zrobiliśmy i przez 1,15h dochodziliśmy dlaczego to nie chce działać skoro kompilator nie zgłasza błędów. A inne wpadki to były raczej typowe ;)

  • 2 lata, 3 miesiące temu
    edytowane przez: newton
    Pytanie społeczności

    0

    Dla mnie pewnym szokiem było działanie funkcji % (reszta z dzielenia czyli modulo) w C. Chodzi o to, że:

      (-22) % 5 = -2
    

    Można by się spodziewać, że reszta z dzielenia będzie zawsze dodatnia (na przykład 3 w tym przypadku), a tu zonk. Sporo czasu spędziłem, żeby wykryć błąd w programie spowodowany tym nieprzewidzianym zachowaniem.

    Ale nie jest to błąd w C tylko niejednoznaczność operacji brania reszty, jak poucza wikipedia.

  • 2 lata, 3 miesiące temu
    edytowane przez: tomaszs
    Pytanie społeczności

    0

    Mam kilka ulubionych. Myślę, że regularne tracenie na początku nauki godzin na ich znalezienie wykształciło w moim umyśle specjalny obszar odpowiedzialny za debugowanie takich rzeczy. Oto i one:

    GOD mode w PHP

    if (user->userName = "admin")
    {
       context->GiveAllPrivilages(user);
    }
    

    Mnogość nulli w C#

    W C# nie tylko jest null i System.DBNull.Value ale też każdy typ Nullable posiada swój specyficzny typ null. W efekcie możesz sprawdzić czy coś jest puste, a okazuje się że nie jest... i jest zarazem

    Gdzie ten obiekt?

    Wszystkie problemy z obliczeniami w grafice 2D i 3D. Chcesz zobaczyć na ekranie ładny prostokąt a okazuje się, że on z niewyjaśnionych przyczyn znajduje się far far beyond the space.

    UTFowa BOM(B)

    Każdy kto programował w PHP wie, że ten jeden drobny znacznik na początku pliku kodu powoduje, że kompilator PHP po prostu szaleje.

    Krzaczki

    Ciągnąć temat polskich znaków.... różne kodowania, substr w PHP, którego użycie powoduje takie ucięcie tekstu w UTF-8 że pojawiają się krzaki (polecam metody klasy mb przeznaczone specjalnie do UTF-8). use utf-8 wywoływane na bazie danych, żeby odczyt był w tym kodowaniu itd. itp. masę problemów

    Białe spacje

    Przychodzi raport 20MB, ale przetwarzanie jego okazuje się nieskuteczne. Siedzisz z lupą pół dnia szukając ducha. Aż w końcu znajdujesz... białą spację!

Zaloguj się, aby dodać swoją odpowiedź