Может ли GDB установить точку останова для последовательности вызовов функций? - PullRequest
2 голосов
/ 26 марта 2019

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

Могу ли я достичь результата разбивания только тогда, когда вершина стека содержит что-то вроде этого?

#0 __GI_connect
#1 curl_connect
#2 get_file
#3 init_assets

Просто выполнение

b init_assets
c
b get_file
c
...

не работает, так какinit_assets вызывается несколько раз, и он не вызывает curl каждый раз, поэтому GDB будет взламывать несвязанный код, который использует curl.

1 Ответ

4 голосов
/ 26 марта 2019

Вы можете использовать условную точку останова с вспомогательной функцией $_caller_is .Как то так:

(gdb) break connect
Breakpoint 1 at 0x7ffff7ee6820
(gdb) cond 1 $_caller_is("curl_connect") && $_caller_is("get_file", 2) && $_caller_is("init_assets", 3)
...