Ответ 1
Два варианта:
-
up 200
приведет вас к 200 кадрам - Если вы знаете начального вызова рекурсивной подпрограммы, вы можете сделать
f[rame] <caller-func>
- это перейдет к кадру адресаcaller-func
.
См. Выбор рамки в руководстве.
Я отлаживаю переполнение стека из-за бесконечной рекурсии. Программа выходит из строя, когда стек имеет глубину 700 вызовов.
Я хочу перейти к кадру, в котором была вызвана функция. Однако gdb показывает мне трассировку стека от вершины стека примерно по 20 записей за раз, и мне интересно, могу ли я как-то пропустить прямо к вызывающей функции, не просматривая трассировку стека, чтобы найти ее номер.
С этой целью я хочу иметь возможность перейти к фрейму стека на основе его имени вместо его номера.
Можно ли это сделать в gdb?
Два варианта:
up 200
приведет вас к 200 кадрамf[rame] <caller-func>
- это перейдет к кадру адреса caller-func
.См. Выбор рамки в руководстве.
Вы должны использовать bt
с минусом. Он похож на bt
, но сначала печатает самые внешние n кадров.
Например: bt -100
И, скорее всего, вы увидите кадр, который вам нужно проверить на первом или втором экране.
После того, как высекали трассировку стека с помощью bt -100
, мне удалось легко установить pboblem с множеством рекурсивных вызовов.
И затем выполните команду f <here the number of your frame you need to inspect>