Jak wszystko debuggować?Metoda James'a Golick'a #wolnenotatki

Metoda James'a Golick'a 

Zasada: nic nie niedoskonałe, tylko nie działa.

Problem: Jak znaleźć bug w języku, którego nie znasz? Np. Strona internetowa nie działa. Masz problem z .php i nie znasz się na nim.

Metoda z zastosowaniem programu Sudo strace-ff-s 2028-p22935

Program, który poda ci ścieżki wszystkich twoich system calls (ang. wywołanie systemowe; interface łączący użytkownika z komputerem) wykonywane przez program, na którym pracujesz.


1.
Znajdź pid (project initiation documentation)

2. Użyj programu Sudo strace-ff-s 2028-p22935.

3. Jak czytać strace output

  • write(l, "hi\n",3) = 3
  • (write to nazwa funkcji) ("hi\n" to argumenty) (3 to return value)
4. Znajdź błąd / uszkodzenie
  • writev(12, [{"HTTP/1.0 500 Internal Server Err"..., 256},
  • {"\37\213\10\0\0\0\0\3", 10},
  • {"\3\0", 2}, {"\0\0\0\0\0\0", 8}] = 276
5. Znajdź przyczynę buga
  • open("/var/www/db.in.php", 0_RDONLY)
  • -1 ENOENT (No such file or directory)
6. Znajdź złoczyńcę ]:>
  • open("/var/www/index.php", 0_RDONLY) = 13
7. Sprawdź swoje hipotezy (sprawdź czy plik znajduje się tam, gdzie powinien, czy go nie ma)

8. Napraw błąd #viola


Metoda Tradycyjna

Znalezienie buga na cudzej stronie (3 min) vs. znalezienie buga na własnej stronie (1 godzina). Dlaczego tak się dzieje?

Błąd: zaczynamy naprawiać błędy, sprawdzając kod i pisząc coś nowego, zamiast użyć pomocy (np. programu)

  1. Zapomnij wszystko to, co wiesz o swoim kodzie, bo jest po prostu zły.
  2. Poradź się trzeciej osoby - przekaż jak coś teraz działa a jak powinno działać (do jakiego efektu dążysz).
  3. Znajdź dobre źródło kodu.
  4. Patrz się na kod, dopóki to ma sens.
  5. Zidentyfikuj swój kod - w jakim stoisz punkcie.
  6. Napraw cokolwiek.

YouTube:
How to Debug Anything by James Golick
Does your code work? Probably not. The libraries you're using
probably don't work either.


Komentarze

Popularne posty z tego bloga

Na początku był C++... #nauka

Pętla for, while, do.. while. Pętle wyjaśnione cz.2 #c++