Dawno, dawno temu używałem dużo kodu do debugowania. Niemal całkowicie celowałem w system Windows, więc było wiele funkcji wyjściowych łańcucha debugowania, których nie pamiętam, jak przeliterować, więc mogłem przechwycić ślad za pomocą konkretnego programu.
Część kodu debugowania pozostała na miejscu, szczególne rzeczy, które miały zagnieżdżać wywołania. Jednak pomimo tego, że ciąg znaków debugowania w większości nie byłby widoczny w systemie produkcyjnym, wszystko to zostało wykonane w ramach kompilacji warunkowej.
Rzeczywistość jest jednak taka, że cały ten kod debugowania wymagał dużego wysiłku w przypadku czegoś, co idealnie byłoby obsługiwane w inny sposób - oczywiście przy użyciu debugera. W tym czasie nie byłem pod wrażeniem debuggera Borland C ++. Narzędzia były tam, ale zbyt często dawały mylące wyniki, a użycie debuggera innego niż IDE (często konieczne) oznaczało zapamiętanie skrótów klawiszowych, co oznaczało odwrócenie uwagi od wykonywanego zadania.
Jedynym doświadczeniem debugowania, które jest gorsze, jest GDB z wiersza poleceń.
Bycie ekspertem w zakresie narzędzi, których używasz na co dzień, jest oczywiście ważne - ale debugowanie naprawdę nie powinno być czymś, co robisz na co dzień. Jeśli używasz debugera tak często, możesz nauczyć się dziesiątek poleceń i / lub skrótów klawiaturowych, wydaje mi się to nieco czerwoną flagą.
Kiedy pracowałem w Visual Studio 7, było jednak jasne, że debugowanie może być bardzo praktyczne i skuteczne. Jeśli możesz przeprowadzić debugowanie w programie Visual Studio (w tym wersje ekspresowe), debugowanie jest bardzo proste. Bez wątpienia, jeśli możesz znaleźć odpowiedni interfejs GUI / IDE, GDB jest również łatwy i skuteczny, chociaż nie przeprowadziłem jeszcze tego wyszukiwania.
Można również powiedzieć coś o testowaniu jednostkowym, z analizą zasięgu za pomocą gcov. Im bardziej pewne jest zachowanie bibliotek, tym mniej potrzeba głębokiego debugowania - i tym rzadziej potrzebujesz debuggera. Pisanie testów jednostkowych jest dość rozsądnym rozwiązaniem, które powinieneś robić przez większość dni.
Nieoczekiwanie ważne narzędzie = cmake, narzędzie do budowania, które pozwala mi łatwo przełączać się między budowaniem dla GCC i dla VC ++, między innymi. Mogę więc przeprowadzić testy jednostkowe i zasięg oparty na gcov za pomocą GCC, ale łatwo przejść do VC ++, aby użyć debuggera.