Предполагая, что в gcc есть что-то вроде файлового и строкового макросов MSVC, которые расширяются до текущего файла и текущей строки, вы можете создать собственную функцию псевдопрофилирования. Поместите это в заголовок:
void MyPseudoProfileLog(const char* file, int line, int* count);
#define MY_PSEUDO_PROFILE_LOG(file, line) { static int count = 0; MyPseudoProfileLog(file, line, &count); }
Это происходит в файле cpp (если вы поместите его в заголовок, вы получите несколько копий статической переменной, по одной для каждого файла cpp, в который вы включаете заголовок):
void MyPseudoProfileLog(const char* file, int line, int* count)
{
static FILE* f = NULL;
const int max_count = 1000;
if (++(*count) == max_count)
{
*count = 0;
if (!f)
f = fopen("/tmp/my_pseudo_profile_log.log");
fprintf(f, "file=\"%s\", line=%d was passed %d times\n", file, line, max_count);
fflush(f);
}
}
Тогда вы можете вставить
MY_PSEUDO_PROFILE_LOG(__FILE__, __LINE__);
в различные места в вашем коде, чтобы увидеть, как часто они будут вызываться. Имейте в виду, что это не потокобезопасно, поэтому используйте только в основном потоке.