Я хотел бы войти в функцию, которую GDB в настоящее время выполняет, но не в функции, которые вызываются для подготовки параметров для вызова.

Есть ли в gdb единственная команда, которая обходит такие функции, как initial_metadata_flags(), и прямо переходит к SendInitialMetadata?

  void StartCallInternal() {
>   single_buf.SendInitialMetadata(&context_->send_initial_metadata_,
                                   context_->initial_metadata_flags());
  }

Если и есть, я не видел здесь упоминания об этом: https:// sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Мой текущий обходной путь — step, finish, step, finish, пока я не доберусь до основной функции в этой строке. Но хотелось бы чего-то более прямого.

Аналогичные вопросы задают о Python и Visual Studio , но я не нашел хорошего ответа для gdb.

gdb
1
Greg C 23 Мар 2020 в 22:46
1
Будет ли tbreak single_buf.SendInitialMetadata с последующим continue близким к тому, что вы хотите?
 – 
Mark Plotnick
24 Мар 2020 в 17:47

1 ответ

Вы можете настроить функции, которые вы хотите пропустить при пошаговом выполнении:

(gdb) help skip
Ignore a function while stepping.

Usage: skip [FUNCTION-NAME]
       skip [FILE-SPEC] [FUNCTION-SPEC]
If no arguments are given, ignore the current function.

FILE-SPEC is one of:
       -fi|-file FILE-NAME
       -gfi|-gfile GLOB-FILE-PATTERN
FUNCTION-SPEC is one of:
       -fu|-function FUNCTION-NAME
       -rfu|-rfunction FUNCTION-NAME-REGULAR-EXPRESSION
...
0
Employed Russian 24 Мар 2020 в 03:36