Как скомпоновать отладочные версии libc и libstdc++ в GCC?

Я знаю об этом вопросе, но, похоже, он не работает для меня.

Для настройки возьмем простую программу на C++, hw.cpp, заданную: int main() { }

После компиляции с помощью g++ -o hw hw.cpp -O0 -g на Linux, запустив ldd . /hw дает:

    linux-gate.so.1 =>  (0x003e5000)
    libstdc++.so.6 => /usr/local/lib/libstdc++.so.6 (0x007c5000)
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x006a4000)
    libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x00a40000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00a93000)
    /lib/ld-linux.so.2 (0x00a0f000)

Теперь у меня также есть отладочные библиотеки в /usr/lib/debug/lib/tls/i686/cmov/, которые, как я полагаю, являются соответствующими отладочными сборками системных библиотек.

Вопрос: Как мне скомпилировать мою программу так, чтобы она была связана с отладочными сборками стандартных библиотек C и/или C++, libc/libm/libstdc++, общей или статической? Для общей сборки я хочу, чтобы вывод ldd ./hw указывал на каталог отладки.

(Предыстория: Одна из общих библиотек, используемых в моем проекте, по сообщениям Valgrind, протекает ("все еще достижима"), но причина не в самой общей библиотеке, а в коде типа dlopen (см. здесь). Поэтому я решил, что если я смогу пройтись по _Start() вызову в CRT, то смогу отследить виновника.)

Обновление/исправление: Я думаю, что я был просто очень, очень глуп - отладочные библиотеки, вероятно, всегда были слинкованы так, как нужно. Меня смутило то, что отладчик ничего не показывает во время шага, это потому, что у меня нет исходного кода библиотек.

Обновление II: Хорошо, отложим предыдущее обновление. Теперь у меня есть исходники библиотек, но хотя верно, что стандартная библиотека поставляется с отладочными символами, у меня нет отдельной отладочной сборки. Есть ли такая сборка и как мне с ней работать?

16
задан Community 23 May 2017 в 11:53
поделиться