Почему GDB говорит мне, что указатель составляет 4 байта на x86-64? - PullRequest
14 голосов
/ 13 июля 2010

При использовании 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 Ответ

26 голосов
/ 13 июля 2010

Кажется, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...