# Jak zgłaszać błędy

Dobre raporty błędów stanowią bardzo istotny wkład w rozwój każdego projektu. Jednak tak jak pisanie dobrych programów wymaga sporo pracy, tak dobre zgłoszenia problemów wymagają trochę wysiłku. Prosimy wziąć pod uwagę to, że większość deweloperów jest bardzo zajęta i odbiera nieprzyzwoitą wręcz ilość listów. Wsparcie ze strony użytkownika jest naprawdę ważne w procesie rozwoju MPlayera. Należy jednak pamiętać, że trzeba dostarczyć wszystkie informacje o które poprosimy i postępować dokładnie według instrukcji zawartej w tym dokumencie.

## Zgłaszanie błędów związanych z bezpieczeństwem

Jeśli znalazłeś lukę, którą można wykorzystać, i chcesz zrobić dobry uczynek i pozwolić nam ją naprawić zanim ją ujawnisz, chętnie przyjmiemy zgłoszenie bezpieczeństwa pod adresem security@mplayerhq.hu. Proszę pisać w języku angielskim i dodać [SECURITY] albo [ADVISORY] w temacie. Upewnij się że Twoje zgłoszenie zawiera całkowity i dokładny opis błędu. Jeśli wyślesz też poprawkę będziemy bardzo szczęśliwi. Proszę, nie opóźniaj zgłoszenia żeby stworzyć exploit wykorzystujący lukę, możesz go wysłać w następnym liście.

## Jak poprawiać błędy

Jeżeli uważasz, że posiadasz wystarczające umiejętności, namawiamy Cię do samodzielnego poprawiania błędów. A może już to zrobiłeś? Przeczytaj ten krótki dokument, żeby dowiedzieć się w jaki sposób dodać swoją łatę do źródeł MPlayera. Jeżeli będziesz miał jakieś pytania, pomogą Ci ludzie z listy MPlayer-dev-eng (tylko w języku angielskim -przyp. tłumacza).

## Jak wykonać test regresji za pomocą Subversion

Czasami zdarza się problem typu "wcześniej działało, a teraz przestało...". Tutaj znajduje się, opisana krok po kroku, procedura, której celem jest próba znalezienia źródła problemu. Nie jest ona przeznaczona dla przeciętnego użytkownika.

Najpierw należy pobrać źródła MPlayera z SVN. Więcej szczegółów na ten temat znajduje się w sekcji o Subversion strony pobierania.

W rezultacie w katalogu mplayer/ znajdzie się obraz drzewa Subversion, po stronie klienta. Teraz zaktualizuj ten obraz do daty, która Cię interesuje:

    cd mplayer/
    svn update -r {"2004-08-23"}

Format daty to RRRR-MM-DD GG:MM:SS. Używając takiego formatu daty masz pewność, że będziesz w stanie wyciągać łatki zgodnie z datą, gdy zostały dodane, dokładnie tak jak w przypadku archiwum listy MPlayer-cvslog.

Następnie postępuj tak jak w przypadku normalnej aktualizacji:

    ./configure
    make

Jeżeli czytasz ten dokument, a nie jesteś programistą, najszybszym sposobem na dotarcie do miejsca w którym pojawi się problem jest użycie binarnego wyszukiwania — tzn. szukania daty pojawienia się problemu poprzez dzielenie interwału czasowego na pół przy każdym kolejnym wyszukiwaniu. Przykładowo, jeżeli problem wystąpił w 2003, spróbuj najpierw szukać problemu w wydaniu z połowy roku. Jeżeli będzie obecny, cofnij się do pierwszego kwietnia; jeżeli nie, przejdź do pierwszego października itd.

Jeżeli masz dużo wolnego miejsca na twardym dysku (pełna kompilacja zajmuje aktualnie 100 MB albo około 300-350 MB jeżeli uaktywnione jest debuggowanie), skopiuj najstarszą działającą wersję zanim dokonasz aktualizacji; oszczędzi to sporo czasu, jeżeli zajdzie potrzeba powrotu do starszej wersji. (Zazwyczaj konieczne jest uruchomienie 'make distclean' przed rekompilacją wcześniejszej wersji, więc jeżeli nie zrobisz kopii zapasowej oryginalnego drzewa, będziesz musiał wszystko rekompilować, jeśli będziesz chciał wrócić do aktualnej wersji.)

Kiedy znajdziesz dzień w którym pojawił się problem, kontynuuj szukanie używając archiwum mplayer-cvslog (uporządkowane wg daty) i bardziej precyzyjnych aktualizacji svn obejmujących godziny, minuty i sekundy:

    svn update -r {"2004-08-23 15:17:25"}

To pomoże ci łatwo znaleźć łatkę, która jest winowajcą.

Jeżeli znajdziesz łatkę, która jest źródłem problemu, to znaczy, że już prawie osiągnąłeś sukces; wyślij informację o niej na MPlayer Bugzilla lub zapisz się na listę MPlayer-users i tam wyślij raport. Istnieje szansa, że autor łatki zasugeruje w jaki sposób rozwiązać problem. Możesz też wpatrywać się w łatkę tak długo, aż nie będzie mogła wytrzymać i wyjawi ci lokalizację błędu:-).

## Jak zgłaszać błędy

Po pierwsze sprawdź najnowszą wersję SVN MPlayera, ponieważ dany błąd może być już w niej naprawiony. Rozwój MPlayera przebiega naprawdę szybko, większość problemów występujących w oficjalnych wydaniach jest zgłaszana w ciągu kilku dni albo nawet godzin. Dlatego też prosimy używać tylko wersji z Subversion do zgłaszania błędów. Dotyczy to głównie pakietów binarnych MPlayera. Instrukcje dotyczące Subversion znajdują się na dole tej strony lub w pliku README. Jeżeli problem dalej występuje prosimy sprawdzić listę znanych błędów i resztę dokumentacji. Jeżeli problem nie jest znany lub rozwiązany przez naszą dokumentację prosimy zgłosić błąd.

Nie należy wysyłać zgłoszeń do deweloperów. MPlayer jest dziełem dużej grupy, więc więcej osób może być zainteresowanych tym problemem. Czasami inni użytkownicy spotkali się już z danym problemem i wiedzą, jak go rozwiązać, nawet jeżeli jest to błąd w kodzie MPlayera.

Prosimy opisywać problem tak dokładnie, jak to tylko możliwe. Należy sprawdzić w jakich dokładnie okolicznościach pojawia się błąd. Czy występuje on tylko w określonych sytuacjach? Czy ma związek z konkretnym plikiem lub typem plików? Czy dotyczy tylko danego kodeka, czy też jest niezależny od kodeków? Czy możesz go powtórzyć z każdym wyjściem video? Im więcej informacji dostarczysz, tym większe są szanse na rozwiązanie zgłoszonego problemu. Nie należy również zapominać o dołączeniu wartościowych informacji wymienionych poniżej. W przeciwnym wypadku nie będziemy w stanie prawidłowo zdiagnozować zgłoszonego problemu.

Doskonałym i dobrze napisanym przewodnikiem dotyczącym zadawania pytań jest dokument "Jak mądrze zadawać pytania" napisany przez Erica S. Raymonda (Polskie tłumaczenie tego dokumentu można znaleźć tutaj -przyp. tłum.). Istnieje także inny dokumentem tego typu zatytułowany Jak efektywnie zgłaszać błędy stworzony przez Simona Tathama (Polskie tłumaczenie tego dokumentu można znaleźć tutaj -przyp. tłum.). Jeśli będziesz postępował zgodnie z tymi przewodnikami, powinieneś uzyskać pomoc. Prosimy jednak pamiętać, że śledzimy listę jako ochotnicy, poświęcając nasz wolny czas. Jesteśmy bardzo zajęci i nie potrafimy zagwarantować, że pomożemy rozwiązać zgłoszony problem, ani nawet tego, że odpowiemy na Twoje zgłoszenie.

## Gdzie zgłaszać błędy

Zapisz się na listę MPlayer-users: i wyślij swoje zgłoszenie błędu na , gdzie będzie można je omówić.

Jeżeli wolisz, możesz zamiast tego skorzystać z naszej nowej Bugzilli (systemu zgłaszania błędów - przyp. tłum.)

Językiem obowiązującym na tej liście jest angielski. Prosimy trzymać się zasad standardowej netykiety (Polską wersję netykiety można przeczytać np. tutaj - przyp. tłum.) i nie wysyłać listów w HTML-u na żadną z naszych list. W przeciwnym wypadku zostaniesz zignorowany lub wyrzucony z listy. Jeżeli nie wiesz czym jest list w HTML-u albo dlaczego jest on zły, przeczytaj ten świetny dokument (znów tylko po angielsku - przyp. tłum.). Wyjaśnia on wszystkie szczegóły i zawiera instrukcje wyłączania HTML-u. Zauważ również, że nie wysyłamy kopii listów do użytkowników, więc dobrym pomysłem jest zapisanie się na listę w celu uzyskania odpowiedzi.

## Co zgłaszać

Może zajść potrzeba dołączenia logu, konfiguracji lub przykładowego pliku w Twoim zgłoszeniu błędu. Jeżeli któryś z nich ma duży rozmiar, lepiej załadować go na nasz serwer HTTP w skompresowanej postaci (gzip i bzip2 są preferowanymi formatami) i załączyć tylko ścieżkę i nazwę pliku do zgłoszenia błędu. Nasza lista ma ustawiony limit rozmiaru każdej wiadomości na 80k. Jeżeli potrzebujesz wysłać coś większego, musisz to skompresować albo załadować na serwer.

### Informacja o systemie operacyjnym

- Nazwa Twojej dystrybucji Linuksa albo system operacyjny. Np.:

  - Red Hat 7.1

  - Slackware 7.0 + pakiety rozwojowe z 7.1 ...

- wersja jądra (kernela):

      uname -a

- wersja biblioteki libc:

      ls -l /lib/libc[.-]*

- wersja gcc i ld:

      gcc -v
      ld -v

- wersja binutils:

      as --version

- Jeżeli masz problem z trybem pełnoekranowym:

  - Menadżer okien i wersja

- Jeżeli masz problem z XVIDIXem:

  - głębia barw Xów (colour depth):

        xdpyinfo | grep "depth of root"

- Jeżeli tylko GUI zawiera błędy:

  - wersja GTK

  - wersja GLIB

  - wersja libpng

  - Sytuacja w której pojawia się błąd GUI

### Sprzęt i sterowniki

- informacje o procesorze (CPU) (to działa tylko pod Linuksem):

      cat /proc/cpuinfo

- Producent karty graficznej i model. Np.:

  - ASUS V3800U chip: nVidia TNT2 Ultra pro 32MB SDRAM

  - Matrox G400 DH 32MB SGRAM

- Typ sterownika video i wersja, np:

  - wbudowane sterowniki X

  - nVidia 0.9.623

  - Utah-GLX CVS 2001-02-17

  - DRI z X 4.0.3

- Typ karty dźwiękowej i sterownik, np:

  - Creative SBLive! Gold ze sterownikiem OSS z oss.creative.com

  - Creative SB16 ze sterownikiem OSS z kernela

  - GUS PnP z emulacją ALSA OSS

- Jeżeli masz wątpliwości, załącz wyjście linuksowego polecenia `lspci -vv`.

### Problemy z konfiguracją

Jeżeli `./configure` zwraca błąd albo automatyczne wykrywanie czegoś zawiedzie, przeczytaj `config.log`. Możliwe, że znajdziesz tam odpowiedź, na przykład kilka połączonych wersji tej samej biblioteki w Twoim systemie albo że zapomniałeś zainstalować pakietów rozwojowych (tych z przyrostkiem -dev albo -devel). Jeżeli wydaje Ci się, że istnieje jednak błąd, załącz `config.log` w twoim raporcie.

### Problemy z kompilacją

Prosimy załączyć następujące pliki:

- config.h

- config.mak

### Problemy z odtwarzaniem

Prosimy załączyć wyjście MPlayera w trybie gadatliwym na poziomie pierwszym (opcja -v - przyp. tłum.), ale pamiętając o nie skracaniu wyniku polecenia podczas kopiowania go do Twojego listu. Deweloperzy potrzebują wszystkich informacji do prawidłowego zdiagnozowania problemu. Możesz przekierować wyjście bezpośrednio do pliku w ten sposób:

    mplayer -v opcje nazwa_pliku > mplayer.log 2>&1

Jeżeli Twój problem jest specyficzny dla jednego albo wielu plików, załaduj winowajcę(ów) na:

Załaduj także mały plik tekstowy nazwany tak samo jak Twój plik, ale z rozszerzeniem .txt. Opisz w nim problem, który masz z zawartym plikiem i załącz swój adres email oraz wyjście MPlayera w trybie gadatliwym na poziomie pierwszym. Zazwyczaj pierwsze 1-5 MB pliku jest wystarczające do odtworzenia problemu, ale żeby być pewnym prosimy wykonać:

    dd if=twój_plik of=mały_plik bs=1024k count=5

To polecenie weźmie pierwsze pięć megabajtów 'twojego_pliku' i zapisze je do 'małego_pliku'. Następnie spróbuj odtworzyć mały plik i jeśli błąd wciąż się pojawia plik ten jest dla nas wystarczający. Prosimy w żadnym wypadku nie wysyłać plików poprzez pocztę elektroniczną! Załaduj je na serwer FTP i wyślij tylko ścieżkę/nazwę pliku. Jeżeli plik jest dostępny w sieci, wyślij dokładny adres pod którym jest on dostępny.

### Awarie programu (ang. Crashes)

Musisz uruchomić MPlayera wewnątrz `gdb` i wysłać nam kompletne wyjście, albo jeżeli posiadasz zrzut `core` (ang. core dump) utworzony w wyniku awarii, wyciągnąć z niego użyteczne informacje. Oto jak to zrobić:

#### Jak otrzymać informację o awarii

Przekompiluj MPlayera z opcją debugowania kodu:

    ./configure --enable-debug=3
    make

i uruchom MPlayera używając gdb:

    gdb ./mplayer

Jesteś teraz wewnątrz gdb. Wpisz:

    run -v opcje-mplayera nazwa_pliku

i odtwórz swoją awarię. Gdy tylko to zrobisz, gdb przeniesie cię z powrotem do wiersza poleceń, gdzie należy wpisać

    bt
    disass $pc-32,$pc+32
    info all-registers

#### Jak wyciągnąć sensowne informacje ze zrzutu core (ang. core dump)

Utwórz plik z nastepującymi poleceniami:

    bt
    disass $pc-32,$pc+32
    info all-registers

A następnie uruchomić następujące polecenie:

    gdb mplayer --core=core -batch --command=plik_z_poleceniami > mplayer.bug

## Wiem co robię...

Jeżeli utworzyłeś właściwy raport błędu kierując się powyższymi wskazówkami i jesteś pewien że to błąd MPlayera, nie kompilatora albo uszkodzonego pliku, przeczytałeś dokumentację i nie możesz znaleźć rozwiązania, Twoje sterowniki dźwięku są w porządku, możesz chcieć zapisać się na listę MPlayer-advusers (tylko po angielsku - przyp. tłum.) i wysłać tam swoje zgłoszenie błędu, aby uzyskać lepszą i szybszą odpowiedź.

Wiedz, że jeśli zadasz trywialne pytanie albo odpowiedź na nie znajduje się na stronie man, zamiast dostać odpowiedź zostaniesz zignorowany albo obrzucony wyzwiskami. Dlatego też nie obrażaj nas i zapisz się na listę -advusers tylko jeżeli naprawdę wiesz co robisz i czujesz się zaawansowanym użytkownikiem lub deweloperem. Jeżeli spełniasz te kryteria, nie powinno Ci sprawić problemu znalezienie sposobu zapisania się na listę (pamiętaj, że musisz biegle znać j. angielski - przyp. tłum.)