Deadlock na bazie danych (MS SQL Server 2005). Błędy wynikały z implementacji biblioteki w c++, która w transakcji wykonywała dużo obliczeń kilka razy pobierając i aktualizując dane w bazie. Pojedyńcza transakcja trwała nawet 20 sekund. Zdiagnozowanie że to ta część aplikacji powoduje błąd zajęło prawie 2 dni (profiler jest nieoceniony). Odtworzenie sytuacji na środowisku testowym też nie było łatwe. A na koniec okazało się że tej biblioteki w c++ nie można ruszyć, więc stanęło na workaround (grrrr).
A tak na marginesie, większość błędów która wydaje się komuś trudna wynika z lukach w wiedzy dotyczących danego zagadnienia. Mówię to z autopsji.
Ale obiektywnie trudne błedy to te, o których za mało mamy informacji, aby dojść do tego gdzie leży problem lub są ciężkie w do odtworzenia na środowisku testowym/developerskim. Trudnością jest tu zlokalizowanie problemu, a nie sama algorytmika.
Ach, mam jeszcze jedną perełkę. Znowu biblioteka w c++, komunikacja przez rpc i problem z stale rosnącą pamięcią procesu serwera (który działał jako usługa windows) i rosnącą liczbą tzw. uchwytów. Projekt był baaardzo rozbudowany, składał się z kilkudziesięciu bibliotek c/c++, część autorskich, część open source. Debugowanie tego było wyjątkowo trudne, a miejscami właściwie niemożliwe. Do problemu podchodziło kilka osób, kilka razy, na przestrzeni miesiąca. W końcu udało mi się namierzyć że bibloteka odpowiedzialna za komunikację gdzie tworzony był socket ma bug'a. Zdaje się że była to część kliencka, po nieudanym connect nie było prawidłowego zwolnienia socketa, tylko return. Poprawka błędu to banał. Ale jego odnalezienie to droga przez mękę.