2011-01-14 9 views
11

Czy ktoś ma problemy z mieszaniem -g (usuwanie błędów) i -O2 (najlepsza bezpieczna optymalizacja) z kompilatorem gcc?
Muszę debugować awarie programu wydającego rozpowszechniane wśród użytkowników końcowych, którzy mogliby wysłać mi ponownie plik podstawowy.
Zawsze nazywał:Korzystanie z opcji -g i -O2 w gcc

gdb < < myprogram >> < < rdzeń plik >>

i zobaczyć gdzie jest problem. Teraz widzę tylko śledzenie wywołania, ale bez symboli debugowania mam dość kłopotów.

Każdy pomysł?

Odpowiedz

6

Używamy ich razem w środowisku produkcyjnym, co znacznie ułatwia debugowanie, jeśli klient widział tylko awarię raz. Daje to całkiem niezły pomysł, gdzie jest problem (nie, jeśli było to uszkodzenie pamięci).

Teoretycznie dodanie -g nie powinno tak naprawdę wpłynąć na wydajność, chociaż plik wykonywalny staje się duży. W środowisku wbudowanym jest to duży kompromis.

+5

Obraz z symbolami jest wymagany tylko przez debugger. Jeśli używasz zdalnego debuggera lub przeprowadzasz sekcyjne debugowanie z pliku podstawowego, obraz działający na obiekcie docelowym może zostać pozbawiony symboli. –

10

Działa dobrze.

Albo dobrze, ze względu na optymalizację czasami źródło, przez które przechodzisz z debuggerem, nie pasuje dokładnie do źródła, ale IMHO pomimo tego, że ma symbole debugowania, znacznie ułatwia debugowanie.

+4

Czasami linie źródłowe są wykonywane w kolejności, co początkowo mnie pomyliło. – mkb

+0

Jestem przyzwyczajony do tego behaviuour debugowania kodu wydania VC. Właśnie wędrowałem, jeśli kod jest zoptymalizowany, nawet jeśli zadeklaruję -g ... –

+4

'-g' nie ma żadnego wpływu na kod, tylko na dodatkowych wygenerowanych danych debugowania. –

Powiązane problemy