Что происходит, когда gdb устанавливает несколько точек останова на одном и том же символе по разным адресам?

#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 — очень ценю ваш четкий и лаконичный ответ.