Я ищу инструмент, например ltrace или strace, который может отслеживать локально определенные функции в исполняемом файле. ltrace отслеживает только вызовы динамической библиотеки, а strace отслеживает только системные вызовы. Например, учитывая следующую программу C:
#include <stdio.h>
int triple ( int x )
{
return 3 * x;
}
int main (void)
{
printf("%d\n", triple(10));
return 0;
}
Запуск программы с помощью ltrace
покажет вызов printf
, поскольку это стандартная функция библиотеки (которая является динамической библиотекой в моей системе), а strace
отображает все системные вызовы из кода запуска, системные вызовы, используемые для реализации printf, и код выключения, но мне нужно что-то, что покажет мне, что была вызвана функция triple
. Предполагая, что локальные функции не были встроены оптимизирующим компилятором и что двоичный файл не был удален (символы удалены), есть ли инструмент, который может это сделать?
Edit
Несколько разъяснений:
- Это нормально, если инструмент также предоставляет информацию о трассировке для нелокальных функций.
- Я не хочу перекомпилировать программу с поддержкой определенных инструментов, информация о символах в исполняемом файле должна быть достаточной.
- Мне было бы очень приятно, если бы я мог использовать инструмент для присоединения к существующим процессам, например, с помощью ltrace/strace.