Отладка через libstdC++

Я использую gcc на GNU/Linux и отладочные файлы и заголовки libc и libstd ++ установлены. Но я не знаю, как сказать gdb использовать их исходный код, особенно для отладки в libstd ++. Исходный код самого libstdC++, по-видимому, представлен в сложной структуре. Я думаю, что команда каталогов - это правильный выбор. Я использую Debian / Ubuntu и скачал исходный код с помощью apt-get source libstdC++ 6 в свой домашний каталог.

Я почти уверен, что мне не нужно было предпринимать специальные действия для этого с Fedora (несколько лет назад). Возможно, Fedora была специально подготовлена ​​для этого. Поэтому я буду рад общим инструкциям, которые подходят для каждого дистрибутива.

Спасибо

Обновить
Я понял, что мне нужно скомпилировать с -D_GLIBCXX_DEBUG в дополнение к -gтак выглядит команда compile $ g++ -o test test.cpp -g -D_GLIBCXX_DEBUG,

Кроме того, я получил предупреждение об отсутствии красивых принтеров, которое я решил, как описано здесь: http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html

Теперь я могу отладить в libstdC++, но я всегда получаю это сообщение:

Breakpoint 1, main () at test.cpp:9
9       string str = "str";
(gdb) s
std::allocator<char>::allocator (this=0x7fffffffe1e0)
    at /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h:104
104 /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory.
(gdb) s
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (
    this=0x7fffffffe1c0, __s=0x402930 "str", __a=...)
    at /usr/include/c++/4.7/bits/basic_string.tcc:217
217                    __s + npos, __a), __a)

Мне не нужно устанавливать каталог в GDB для моего загруженного источника (я думаю, что поиск в моем домашнем каталоге). Поэтому я подумал, что мне нужна другая команда, чтобы исправить это, и нашел "set substitute-path" и указал его на /home/username/gcc-4.7-4.7.2/gcc-4.7.2/libstdc++-v3, но я не Работа. Почему GDB ищет allocator.h в совершенно неправильном месте?

1 ответ

Сначала узнайте источники из: - https://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html

Позже скомпилируйте libstdC++ с включенным DEBUG_FLAGS.

Затем попробуйте выполнить отладку с помощью GDB.

Другие вопросы по тегам