Нужны символы отладки для __alignof__ - PullRequest
0 голосов
/ 12 декабря 2018

Я отлаживаю библиотеку glibc.Я построил это с флагами -g3 -O.Я могу напечатать большинство макросов, но не этот.Я отлаживаю malloc (), и есть много макросов, которые используют __alignof__.Но я не могу найти его определение в исходном коде glibc.Вот пример:

(gdb) p MALLOC_ALIGN_MASK
No symbol "__alignof__" in current context.

А также у меня возникла такая же проблема с __builtin_offsetof.Но это встроенный макрос.Таким образом, 2 случая немного отличаются.Решение этой проблемы немного ускорит мою отладку.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

GDB имеет только очень приблизительную реализацию C и C ++.Он не использует тот же синтаксический анализатор C и C ++, что и GCC, поэтому некоторые вещи отсутствуют, включая это расширение GCC.GDB распознает _Alignof, но это не то же самое, что __alignof__.Но в этом случае это будет работать, так что вы можете изменить исходники glibc, чтобы использовать его.

LLDB использует синтаксические анализаторы Clang и поэтому не страдает от этой конкретной проблемы, но не поможет вам в этом, потому что, очевидно,отладчик не распознает данные DWARF, сгенерированные параметром -g3, поэтому информация о макросах отсутствует в исполняемом файле.

0 голосов
/ 12 декабря 2018

Вы не получите никакой отладочной информации.Поскольку __alignof__, как и sizeof, известно только во время компиляции .См. alignof из <stdalign.h>

Даже перекомпилировав сам GCC, вы не получите его (имеется нет доступной информации отладки).__alignof__ обрабатывается во время компиляции (поэтому __alignof__ (double) заменяется на 8 во время компиляции для x86-64 ABI).

Вы можете сами догадаться о расширенном значении MALLOC_ALIGN_MASK.

Вы можете определить const int my_malloc_align_mask = MALLOC_ALIGN_MASK; и использовать p my_malloc_align_mask в отладчике.

Я отлаживаю библиотеку glibc.

Это странноВы должны доверять библиотеке glibc, чтобы вести себя как описано (да, остерегайтесь неопределенного поведения ).

...