Компилятор сохраняет информацию о перечислении в двоичном файле, когда программа компилируется с определенными параметрами.
Когда переменная имеет тип перечисления, отладчик может показать имя перечисления. Лучше всего это показать на примере:
enum E {
ONE_E = 1,
};
int main(void)
{
enum E e = 1;
return 0;
}
Если вы скомпилируете это с помощью gcc -g, вы можете попробовать следующее в gdb:
Reading symbols from test...done.
(gdb) b main
Breakpoint 1 at 0x804839a: file test.c, line 8.
(gdb) run
Starting program: test
Breakpoint 1, main () at test.c:7
7 enum E e = 1;
(gdb) next
9 return 0;
(gdb) print e
$1 = ONE_E
(gdb)
Если бы вы использовали определение, у вас не было бы подходящего типа для предоставления e, и вам пришлось бы использовать целое число. В этом случае компилятор напечатает 1 вместо ONE_E.
Флаг -g просит gdb добавить отладочную информацию в двоичный файл. Вы даже можете увидеть, что он есть, выполнив:
xxd test | grep ONE_E
Однако я не думаю, что это будет работать во всех архитектурах.
person
Penz
schedule
22.01.2011