GDB Перерыв, если кадр находится в обратном направлении

Я хочу установить условие на точку останова gdb только для разрыва, если в обратном направлении появляется определенное имя функции. Какой лучший способ сделать это?

Ответ 1

Я не уверен, как делать то, что вы просите, но возможное обходное решение, если у вас есть доступ к исходному коду соответствующей функции, заключается в установке некоторой глобальной логической переменной в true в начале и установите его в false непосредственно перед выходом функции. Затем вы можете установить условную точку останова (используя команду condition) для остановки только тогда, когда эта логическая переменная true.

Ответ 2

Более простое решение, чем скрипты Python, использует временную точку останова .

Он выглядит следующим образом:

b ParentFunction
command 1
  tb FunctionImInterestedIn
  c
end

Каждый раз, когда вы входите в ParentFunction, вы устанавливаете единовременную точку останова на интересующую вас функцию, затем продолжаете работу (предположительно, пока вы не нажмете эту точку останова).

Так как вы разрываете ровно один раз на FunctionImInterestedIn, это не сработает, если FunctionImInterestedIn вызывается несколько раз в контексте ParentFunction, и вы хотите разбить каждый вызов.

Ответ 3

Альтернативный ответ rix0rrr:

b main
commands
set $inParentFunction = 0
c
end

b ParentFunction
commands
set $inParentFunction = 1
c
end

b FunctionImInterestedIn if ($inParentFunction)