Отладка через 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.