Я хотел бы создать backtrace в gdb (в скрипте). Команда bt 2
печатает только 2 самых внутренних кадра, а bt -2
печатает только 2 самых внешних кадра.Пропустить самые внутренние кадры в backtrace
Что бы я хотел сделать, это skip 2 внутренних кадра и показать все внешние рамки. Я попытался
up 2
bt
(аналогично up-silently
, frame
, select-frame
), но это не влияет на выход bt
. Чтобы быть ясным, я хочу избавиться от первых строк в этом выходе:
#0 0x0000003167e0f33e in waitpid() from /lib64/libpthread.so.0
#1 0x00007f2779835de8 in print_trace()() at /path/to/MyAnalysis.cxx:385
#2 0x00007f2779836ec9 in MyAnalysis::getHistHolder(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)() at /path/to/MyAnalysis.cxx:409
#3 0x00007f27798374aa in MyAnalysis::execute()() at /path/to/MyAnalysis.cxx:599
#4 0x00007f2783a9670f in EL::Worker::algsExecute()() from /blah/lib/libEventLoop.so
...
Любой способ сделать это?
Вызов return
дважды работает, но после этого приложение остается в недопустимом состоянии, поэтому я не могу его использовать.
Помогли ли downvoters объяснить, что не так с этим вопросом? – jdm
может написать свой собственный фильтр? https://sourceware.org/gdb/onlinedocs/gdb/Writing-a-Frame-Filter.html –
@ MarcusMüller Спасибо за ссылку. Это будет вариант, но это, вероятно, слишком велико для такой косметической проблемы. (Кроме того, я в настоящее время отключил автозагрузку скрипта python, когда я вызываю gdb, поэтому для этого потребуется немного работы.) Я действительно удивлен, кажется, что нет простого способа установить текущий кадр. – jdm