Я хочу установить условие на точку останова 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)