Шаг 1: создайте список всех функций, определенных в foo.cpp
Самый простой способ, который я могу придумать (при условии, что у вас есть binutils
и GNU grep
):
nm a.out | grep ' T ' | addr2line -fe a.out |
grep -B1 'foo\.cpp' | grep -v 'foo\.cpp' > funclist
Шаг 2: создайте скрипт GDB, который установит точку останова для каждой из вышеуказанных функций:
sed 's/^/break /' funclist > stop-in-foo.gdb
[Очевидно, шаги 1 и 2 могут быть объединены; -]
Шаг 3: фактически установите точки останова:
gdb a.out
(gdb) source stop-in-foo.gdb
Глядя на этот ответ, еще более простой (если вы используете Fedora Linux) способ узнать, какие функции foo.cpp вызываются:
ftrace -sym='foo.cpp#*' ./a.out
Очень жаль ftrace Страница руководства говорит, что это еще не реализовано.