Желательно(!) что бы эти сообщения не "заводились" через макросы. лучше каким-то статическим объектом или функциями.
Думаю, тут дело как раз в C/C++. Это неуправляемые языки, поэтому все равно придется поработать ручками.
Пишите банальную функцию для записи трейса в файл:
void WriteMyTrace( char*pszTrace, ... ){
va_list ap;
FILE*f;
va_start( ap, pszTrace );
f = fopen( TRACE_FILE_NAME, "a" );
vfprintf( f, pszTrace, ap );
fclose( f );
va_end( ap );
}
Пишите макрос, который будет ее вызывать:
#define TRACE( fmt, ... ) WriteMyTrace( "%s(%i): "##fmt##"\r\n", __FILE__, __LINE__, __VA_ARGS__ )
И расставляете в своем коде ловушки:
...
if( !something( x, y, z ) ){
TRACE( "something [%i, %x, %s]", x, y, z );
return false;
}
if( !something_two( a, b ) ){
TRACE( "something two [%i]", b - a );
return false;
}
...
Трейсер готов. Это было не сложно.
На мой взгляд, интереснее был бы вопрос не о сборе трейсов, а
об инструментах по их анализу, т.к. собрать их для программиста C/C++ - не проблема, за форматом их представления - тоже дело не стоит, а вот правильно понять и найти по ним ошибки, особенно в многопоточных программах - это уже совсем другое дело.