Команда gdb "skip" не может пропустить заголовочный файл libc ++ - PullRequest
1 голос
/ 14 января 2020

Я прочитал Скажите GDB пропустить стандартные файлы , но он не работает в заголовочном файле libc ++, например "memory".

Пример:

// main.cc
#include <memory>
int main(){
  std::unique_ptr<int> a = std::make_unique<int>(10);
  return 0;
}

Компилировать с помощью:

clang++ -g -stdlib=libc++ -std=c++14 main.cc

Затем запустите GDB и пропустите файл памяти:

(gdb) skip -file /usr/include/c++/v1/memory

После этого вы можете still step в std::make_unique() функцию, это почему? (Я использую gdb-8.3.1-release.)

2020.1.15:
Я могу подтвердить, что путь правильный, потому что я копирую путь из кадра gdb.

Я также попробуйте добавить приведенные ниже правила пропуска, но они по-прежнему не работают. (Первые два правила работают в libstdc ++.)

skip -rfu std::.*
skip -rfu std::.*::.*
skip -gfu /usr/include/c++/v1/*

Я попробовал сам debug gdb-8.3.1 и обнаружил, что gdb возвращается из gdb/infrun.c:6365 потому что in_solib_dynsym_resolve_code() возвращает 1. в то время как в libc++ версии std::make_unique GDB попадает в gdb/infrun.c:6569 и вызывает function_name_is_marked_for_skip().

function_name_is_marked_for_skip() - это правило пропуска проверки места GDB.

Итак, это похоже на проблему fre sh gdb из списка gdb bug .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...