#c #gdb
Вопрос:
Что происходит , когда я устанавливаю точку останова на символе типа: b Lock::acquire
, но gdb показывает несколько адресов для одного и того же символа?
1.1 y 0x000000000184b1df in Lock::acquire(bool) at lock.cpp:332
1.2 y 0x00007fa92b96099f in Lock::acquire(bool) at lock.cpp:332
1.3 y 0x00007fa95ca35da1 in Lock::acquire(bool) at lock.cpp:332
1.4 y 0x00007fab4ef7b8b3 in Lock::acquire(bool) at lock.cpp:332
1.5 y 0x00007facd672e94b in Lock::acquire(bool) at lock.cpp:332
Я ожидаю, что один символ всегда указывает на один адрес.
Ответ №1:
Встроенные функции могут появляться внутри других функций по разным адресам.
Комментарии:
1. Это имеет смысл — хотя я не вижу
inline
ключевого слова в объявлении функции. Может ли быть другое объяснение?2. @Joe:
inline
раньше было подсказкой. Ключевое слово было добавлено десятилетия назад, когда компиляторы были не так хороши. Современные компиляторы вполне обходятся без подсказок.inline
в настоящее время имеет несколько иное значение: «может быть определено более одного раза — пусть компоновщик разберется с этим».3. Спасибо, @MSalters — очень ценю ваш четкий и лаконичный ответ.