Zamykacie całego programu z powodu jakiegoś małego błędu

0

Zauważyłem, że niektóre programy w systemie Windows zamykają się z powodu wystąpienia błędu. Błąd nie musi być w samym programie, może wystąpić również w innym programie, z którym współpracuje

Na przykład:
VirtualDub - błąd w kodeku Xvid
Firefox - błąd we wtyczce potrzebnej do wyświetlania pewnej zawartości
Gadu-Gadu - błąd przy wyświetlaniu banera
Comodo internet Security - samoistnie, tak po prostu, nie wykonywałem żadnej operacji

W wymienionych programach w przypadku błędu nie pojawia się systemowe okienko informujące o błędzie z propozycją wysłania raportu do firmy Microsoft, tylko widać wyraźnie, że autor programu zaimplementował własną funkcję obsługi i raportowania błędów (w Gadu-Gadu i Firefox jest propozycja wysłania raportu do autorów programów). Ale to nie zmienia faktu, że błąd powoduje zamknięcie całego programu. Co ciekawe, Firefox jest w stanie odtworzyć adresy stron oglądanych w momencie wystąpienia błędu.

Temu, że zdarzają się błędy trudno się dziwić, bo nie sposób dokładnie przetestować działania na wszystkich możliwych konfiguracji sprzętowych i programowych, ale widać, że autorzy wymienionych programów wzięli to pod uwagę, ale zrobili, jak zrobili.

W takim razie zasadnicze pytanie, dla zadania którego pisze ten post:
Jaki jest sens, żeby zamykać cały program (a może nawet "zabijać" proces) bez zgody użytkownika, tylko dlatego, że wystąpił jakiś drobny błąd, i to jeszcze nie w samym programie, tylko w innej bibliotece lub wtyczce, z którą współpracuje? Przecież, gdyby nie zamykać programu, to ta funkcja, w której wystapił błąd może nie będzie działać, ale reszta programu powinna działać.
Ewentualnie program po wystąpieniu błędu mógłby pytać się użytkownika, czy zamknąć program, czy nie.

0
  1. Propagacja błędu. Błąd w programie zależnym może spowodować inne błędy. Zatem program się zwija i zamyka, "ratując" dane użytkownika. Działanie w myśl zasady jak nie wiadomo co zrobić to wzywamy policję.
  2. Lenistwo programistów, którzy nie traktują obsługę błędu na zasadzie jak się wywali to się wywali.
  3. Program nie jest napisany w oparciu o moduły/pluginy i nie można po prostu wyłączyć jednego modułu bez szkody dla innych.
0

Oprocz tego nie wszystkie bledy latwo wylapac. Czasem zostaje zalozyc pulapke na wszystkie nieobsluzone bledy. Wtedy pokazuje sie ladne okienko, bo w tym miejscu zwykle i tak nie wiadomo juz co sie stalo. Przyklad: plugin pisze po pamieci.

0

Mam pytanko czy nie znacie jakiegoś tutoriala tudzież przykładu, artykułu jak zaimplementować mechanizm własnej obsługi takich błędów jak ma np FF czy GG?

0

Eee drobne błędy powiadasz? Wyobraź sobie, że jakaś tam funkcja przekazuje do innej przez referencję strukturę wskaźników na inne funkcje, które trzeba wykonać. Niestety z jakiegoś nieprzewidzianego powodu wskaźnik nie wskazuje na właściwą strukturę, ale na losowy kawałek pamięci. Jako, że kawałek pamięci jest losowy, to wskaźniki są losowe, więc nastąpi skok do losowego kodu i... dup wyjątek.

Nie wiadomo co się stało i skąd się to wszystko wzięło, a wszystko przez to, że przyczyna błędu nie została przewidziana. Gdyby było inaczej i przyczyna błędu zostałaby przewidziana, to błędu by nie było. Więc jeśli wystąpił błąd, o którym nikt nie pomyślał, to można prosto wywnioskować, że nikt również nie pomyślał, co w takiej sytuacji zrobić dalej. Dlatego najlepszym rozwiązaniem jest zamknięcie programu. IMO jest to prosta analogia. Jedno wynika z drugiego.

Inny przypadek, to rozjechanie się stosu. Przy powrocie z funkcji program skacze do dowolnego miejsca w pamięci i próbuje wykonać losowy kod. W tym wypadku ciężko mówić o wykonywaniu programu dalej, bo skoro rozjechał się stos, to nie wiadomo dokąd i kiedy należy powrócić.

Do tego należy dodać jeszcze synchronizację z wątków. Dla przykładu wątek A wysyła komunikat do wątku B aby ten sczytał z dysku odpowiedni plik, a następnie A zawiesza swoje działanie oczekując na wynik operacji przeprowadzanej przez B. Niestety B pada ofiarą spisku i się wykrzacza, co powoduje zawieszenie A.

[updated]
Teoretycznie nie powinno się w ten sposób odpowiadać, ale nie chcę tworzyć nowego posta.

fąfel napisał(a)

@CyberKid klocilbym sie czy przyklady ze stosem czy wskaznikami sa "drobnymi bledami" o ktore pytal autor watku.

To autor wątku przyjął, że te błędy są drobne. Tak na prawdę z jego wypowiedzi wynika, że on o tych błędach nic nie wie ;)

0

@CyberKid klocilbym sie czy przyklady ze stosem czy wskaznikami sa "drobnymi bledami" o ktore pytal autor watku. Ale ogolnie mam podobne zdanie. Do tego male bledy w pluginach (o ktorych przeciez nie wie czasami glowny program jak zostal tworzony) moga powodowac duze blady w samym programie, powodowac jego niestabilnosc, itp. Nigdy nie wiesz np, czy jak masz blad w kodeku xvid, jaki wplyw to bedzie mialo na virtual duba, i tworcy vd tez tego nie wiedza, a to moze byc np jakis mosmiczny problem. Sprowadza sie to do tego co opisal Koziolek - ochrona danych uzytkownika.
Poza tym, jak wystapi blad we wtyczce ktora uzywam (czyli polegam na jej dzialaniu aby zrobic to co chce) to tak czytak bym zrestartowal glowna aplikacje i sprobowal ponownie - po co ci np virtual dub jak wywalil sie kodek a z niego wlasnie korzystasz?
Co do gg to ich reklamy sa glownym zrodlem dochodu, moze to ma takze wplyw ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1