Компилятор сохраняет информацию перечисления в двоичном виде, когда программа компилируется с определенными параметрами.
Когда переменная имеет тип перечисления, отладчик может показать имя перечисления.Лучше всего это показать на примере:
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
Я не думаю, что это будет работать во всех архитектурах.