Чтобы упростить вещи, скажем, у меня есть следующее в xxx.c:
int foo = 0;
void bar() {
...
}
Условная компиляция внутри панели позволяет мне скомпилировать двумя способами.Я компилирую первым способом и создаю разделяемую библиотеку, назовем ее lib1.so.Затем я компилирую вторым способом и создаю другую разделяемую библиотеку, назовем ее lib2.so.Теперь я запускаю основную программу и динамически загружаю (dlopen) как lib1.so, так и lib2.so.Если я попрошу GDB «print foo», он выведет значение, но какое это будет?Я не могу квалифицировать foo с именем файла ('xxx.c' :: foo), потому что имя источника одинаково для обоих совместимых объектов.Есть ли способ указать gdb специально печатать foo из lib1.so или foo из lib2.so?
Если я установил точку останова на 'bar', gdb достаточно умен, чтобы установить 2 точки останова, одну вкаждый поделился.Поэтому я немного удивлен, что «print foo» не печатает одинаково два значения, по одному для каждого общего ресурса.