Почему gdb говорит мне, что указатель имеет 4 байта на x86-64?
Видно с gdb на openSUSE, CentOS, Fedora и Ubuntu:
Этот gdb был настроен как "x86_64-unknown-linux-gnu".
(gdb) p sizeof (void *)
$1 = 4
(gdb) p sizeof (long)
$2 = 4
Почему gdb дает мне неправильные ответы на всех моих 64-битных системах?
Ответ 1
Кажется, что gdb выбирает некоторые неожиданные значения по умолчанию, когда вы не отлаживаете какой-либо конкретный фрагмент кода. Если вы загружаете 64-битный исполняемый файл, как в: gdb /bin/sh, вы получаете менее неожиданный результат:
(gdb) p sizeof(void *)
$1 = 8
Вы также можете указать gdb, что делать:
(gdb) show architecture
The target architecture is set automatically (currently i386)
(gdb) p sizeof(void *)
$1 = 4
(gdb) set architecture
Requires an argument. Valid arguments are i386, i386:x86-64, i8086, i386:intel, i386:x86-64:intel, auto.
(gdb) set architecture i386:x86-64
The target architecture is assumed to be i386:x86-64
(gdb) p sizeof(void *)
$2 = 8