Я прочитал Скажите 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 .