Почему GDB пытается перечислить несуществующие заголовки? - PullRequest
1 голос
/ 01 мая 2020

Я нуб, изучающий c ++ и использующий gdb для отладки.

В Makefile я компилирую свой индивидуальный объект js, используя:

g++ -Wall -g -O0 -c foo.cc
g++ -Wall -g -O0 -c bar.cc
...

, затем компилирую весь исполняемый файл, используя:

g++ -Wall -g -O0 foo.o bar.o -lncursesw 

Затем я использую GDB для step через мой код. Он продолжает входить в стандартную библиотеку, поэтому я следовал этой рекомендации сценария , чтобы пропустить абсолютные имена файлов с префиксом /usr/include/c++/*.

Теперь моя проблема

gdb пытается перечислить файлы, которых нет на моей машине. Если изнутри gdb (после команды start) я выполняю info sources, есть куча файлов с префиксом /build/gcc/*, которых нет на моем компьютере. Почему GDB попытался получить к ним доступ?

При переходе по нему я не могу пропустить файлы, так как GDB скажет мне: «Нет такого файла или каталога»

std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream (this=0x7fffffffc680, __in_chrg=<optimized out>,
__vtt_parm=<optimized out>) at /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream:518

/build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/fstream: No such file or directory.

1 Ответ

1 голос
/ 01 мая 2020

Почему GDB их отправил?

Когда вы выполняете команду start, GDB запускает программу и останавливается в начале main. Помимо прочего, GDB загружает все динамически связанные библиотеки, с которыми связана ваша программа. Одним из них является libstdc ++, стандартная библиотека C ++. Когда он загружен, GDB также загружает информацию об отладке, где присутствуют файлы с префиксом /build/gcc/*. Если вы не собираетесь отлаживать libstdc ++, нет необходимости хранить их на вашем компьютере.

...