2009-04-17 19 views

Odpowiedz

31

Pliki do debugowania będą zawierały symbole debugowania, które mogą być używane przez debugger. Wersje wydania często nie zawierają symboli debugowania, więc jeśli otrzymasz zrzut awaryjny, otrzymasz tylko garść adresów szesnastkowych zamiast użytecznych nazw symboli.

Debug buduje nie są zestawiane z optymalizacją (-O0 z GCC), natomiast uwolnienie kompilacje są zestawiane z optymalizacją (zazwyczaj -O2 lub -O3). Optymalizacja sprawia, że ​​debugowanie jest o wiele trudniejsze. Jeśli spróbujesz debugować aplikację wydającą, debugger stanie się bardzo zagmatwany, ponieważ instrukcje montażu nie będą już zgodne z instrukcjami HLL, instrukcje zostaną zmienione, funkcje zostaną wstawione, pętle zostaną rozwinięte itd.

Wersje debugowania i wydania również zdefiniowano różne symbole preprocesorów, a niektóre kod są kompilowane warunkowo w oparciu o te (na przykład kontrole granic tablic, asercje itp.), chociaż jest to wysoce zależne od aplikacji. Typowym przykładem może być #define NDEBUG dla trybu zwolnienia, który powoduje usunięcie twierdzeń.

0

W Tiger, kompilacje debugowania są "zero połączone". Jest to zoptymalizowane tylko dla ciebie i nie jest to kompletna kompilacja.

Powiązane problemy