Отслеживание всех вызовов определенных пользователем функций с использованием GDB - PullRequest
0 голосов
/ 15 ноября 2010

Я хочу отследить все определенные пользователем функции, которые были вызваны (по порядку и желательно с входными параметрами).Есть ли способ сделать это с помощью GDB?ИЛИ есть ли лучшее приложение с открытым исходным кодом для этой работы?Обратите внимание, что я хочу печатать только определенные пользователем вызовы функций.

например:

int abc(int a, char b) {
  return xyz(a+b);
}

int xyz(int theta) {
  return theta * theta;
}

Мне нужен следующий вывод:

abc (a, b);xyz (theta);

Моя кодовая база довольно огромна и скомпилирована из разных частей, поэтому я хочу избегать использования инструмента, который требует от меня повторной компиляции исходного кода с некоторыми включенными параметрами.* PS: я обнаружил, что есть способы определить функции в gdb и передать имена функций в качестве параметров, чтобы найти трассировку вызовов.Но в моем случае кодовая база довольно большая, и я начинаю с нее, поэтому я даже не уверен, как называются все функции и т. Д. Перечислять все функции здесь нецелесообразно.

ТИА

1 Ответ

1 голос
/ 15 ноября 2010

Вам нужно запустить какой-нибудь инструмент стороннего производителя для вашего двоичного файла, например Quantify (IBM) или Callgrind (или как @Paul R, упомянутый выше, gprof). Они сгенерируют дерево вызовов, которое предоставит вам необходимую информацию, например, google: "дерево вызовов C с функциями", которое откроет множество полезностей, которые вы можете связать со своим кодом ...

Если вы хотите свернуть свои собственные, вам нужно добавить одну строку в начало каждой из ваших функций, которая создает объект, выделенный в стеке, и вы можете поймать последовательность ctor / dtor, чтобы знать, когда вы ввели и вышел из функции, а затем сохранил их «стек» для генерации собственного дерева вызовов ... довольно легко сделать (в однопоточном, сложном в многопоточном) ...

...