Отслеживание вызовов функций в C++ с помощью gdb

У меня есть система, разработанная на C++ на платформе Linux. Я занимаюсь отладкой этой системы. Я хочу найти полную последовательность вызовов функции. Предположим, что функции вызываются в следующей последовательности

function_1 -> function_2 -> function_3 -> function_4

Если я поставлю точку останова в function_4, выполнение будет приостановлено в этой точке. Я хочу видеть, что функции_1, функция_2 и функция_3 вызываются перед функцией_4. Есть ли какая-либо команда gdb для отслеживания этих вызовов функций?

Спасибо, Анкур


person user982740    schedule 08.02.2012    source источник
comment
Вызывается ли функция_1, а затем возвращается или функция_1 вызывает функцию_2() и др.   -  person Adrian Cornish    schedule 08.02.2012
comment
RTFM: что-то вроде bt или st (обратная трассировка или трассировка стека).   -  person John3136    schedule 08.02.2012
comment
bt получает обратную трассировку, но она опирается на фрейм стека, поэтому, если все эти вызовы функций не вложены друг в друга (1 вызывает 2 вызова 3 вызова 4), это не сработает для вас.   -  person wkl    schedule 08.02.2012


Ответы (3)


Вы хотите обратную связь. Команда gdb bt покажет именно то, что вас интересует.

person StilesCrisis    schedule 08.02.2012
comment
bt недоступна на сервере Linux. Разве нельзя найти вызовы функций с помощью gdb? - person user982740; 08.02.2012
comment
Кроме того, для проверки стека вызовов используйте команду frame или f. Подробнее здесь: ofb.net/gnu/gdb/gdb_43.html#SEC43< /а> - person Aman Aggarwal; 08.02.2012
comment
Спасибо дружище, бт работает. Это именно то, что я искал. Спасибо. - person user982740; 08.02.2012


Если функция_1() вызывает функцию_2(), которая вызывает функцию_3() и т. д.

Вы можете установить точку останова в function_4() и использовать команду

where

Чтобы распечатать трассировку стека

Другой инструмент, который может быть полезен, — это valgrind с инструментом callgrind.

person Adrian Cornish    schedule 08.02.2012
comment
Спасибо Адриан, это работает. Он точно такой же, как bt. Спасибо - person user982740; 08.02.2012