Я знаю об этом вопросе, но, похоже, он не работает для меня.
Для настройки возьмем простую программу на 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: Хорошо, отложим предыдущее обновление. Теперь у меня есть исходники библиотек, но хотя верно, что стандартная библиотека поставляется с отладочными символами, у меня нет отдельной отладочной сборки. Есть ли такая сборка и как мне с ней работать?