skip
- это то, что вы хотите. Вы можете пропустить функции или файлы.
Если вы входите в какой-то нежелательный код, вы можете использовать skip this
, чтобы пропустить функцию, в которую вы только что вступили, или skip file
, чтобы пропустить файл, где он находится.
В любой момент вы также можете использовать skip function_name
или skip filename
и нажимать TAB после того, как несколько символов заставят GDB завершить для вас имя.
Также возможно указывать имена функций или имен файлов, используя регулярные выражения или шаблон файла глобуса, соответственно.
Для обычных вещей, которые вы всегда хотите пропустить, вы должны добавить команды пропуска в файл .gdbinit
в вашей домашней папке. Например, у меня есть код ниже в моем .gdbinit
.
# Skip the Catch library functions when stepping into
skip -rfu Catch
skip -rfu _catch_sr
# Skip everything from the std namespace
skip -rfu ^std::
skip -rfu ^gsl::
# Skip everything in SFML workspace
skip -rfu ^sf::
skip -rfu ^arma::
skip -rfu ^Glue
С регулярными выражениями это означает, что gdb пропустит что-либо в пространстве имен std
также из нескольких других библиотек, которые я регулярно использую,например, catch , armadillo и т. д.
Для шаблона glob вы можете сделать что-нибудь, например
skip -gfile /usr/include/c++/9.1.0/bits/*
К сожалению, шаблон globпохоже, не обрабатывает что-то типа «любой файл в любой подпапке какой-либо папки». Было бы очень полезно, если бы gdb разрешал что-то, например,
skip -gfile /home/myuser/.conan/**/*
, например, пропустить любой файл в подпапке из папки .conan
. В эту папку менеджер пакетов conan устанавливает библиотеки. Тогда с помощью одной команды skip
gdb не сможет войти в любой код внешней библиотеки.