2012-03-20 17 views
6

Mam wiele instrukcji preprocesora C #define, które znacznie ułatwiają programowanie w języku C. Jednak podczas debugowania za pomocą GDB, "etykiety" preprocesora nie są uwzględniane na liście symboli.Czy GDB rozpoznaje symbole preprocesora?

Czy istnieją sposoby, aby GDB rozpoznaje etykiety d z #define?

Odpowiedz

9

Możesz spróbować kompilacji za pomocą g3, zgodnie z opisem here.

gcc -gdwarf-2 -g3 

Mijamy -gdwarf-2 i -g3 flagi celu zapewnienia kompilator obejmuje informacje na temat makr preprocesora w informacji debugowania.

Lub możesz spróbować -ggdb.

+0

'-ggdb' nie ma żadnego efektu. Zobacz [Interpretowanie obiektu powodującego awarię w __cxa_finalize] (https://sourceware.org/ml/gdb/2011-08/msg00109.html) (jestem pewien, że Jan jest jednym z programistów GDB). – jww

3

#define Symbole nie są zazwyczaj dołączane jako część informacji debugowania. const zmienne (lub inline functions for function-like macros) są zwykle lepszym pomysłem, a także z innych powodów (np. Ustalanie zakresu, bezpieczeństwo typu, wielokrotne oceny itp.). Zalecam używanie ich na rzecz symboli preprocesora, kiedy tylko możesz.

+0

@EmployedRussian: Edytowano. –

+0

+1 za faworyzowanie 'const', choć nie nazwałbym ich" 'const' variables";) – 0xC0000022L

+0

Twoja odpowiedź nadal przyjmuje tylko jeden rodzaj '# define', a mianowicie jeden definiujący stałą. Wiele innych jest możliwych, np. '#define min (a, b) ((a) <(b))? (a): (b) ". –

Powiązane problemy