GDB Break, если кадр находится в обратном следе - PullRequest
12 голосов
/ 12 ноября 2010

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

Ответы [ 3 ]

3 голосов
/ 02 мая 2016

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

Это выглядит так:

b ParentFunction
command 1
  tb FunctionImInterestedIn
  c
end

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

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

2 голосов
/ 14 ноября 2010

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

0 голосов
/ 16 августа 2017

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

b main
commands
set $inParentFunction = 0
c
end

b ParentFunction
commands
set $inParentFunction = 1
c
end

b FunctionImInterestedIn if ($inParentFunction)
...