-finstrument-functions
gcc のオプションとこの (簡略化された) コードを使用して、トレース動作を実装しました。
void __cyg_profile_func_enter(void *this_fn, void *call_site)
{
Dl_info di;
if(dladdr(this_fn, &di))
printf("entered %s\n", (di.dli_sname?di_dli_sname:"<unknown>"));
}
これはうまく機能しますが、1 つのことを除いては、マクロも処理されますが、関数はマクロを含む関数の情報を出力します。
そのため、マクロを含む関数では、その情報が複数回出力されます (これはもちろん望ましくありません)。
マクロが処理されていることを検出するものはありますか? または、計測マクロをまったくオフにすることは可能ですか?
PS同じ問題が発生しますsizeof()
編集:明確にするために:マクロがインストルメント化された機能をいじるのを防ぐための解決策を探しています(これはすべきではありません)。マクロ、関数、および/またはその他のものをトレースするメソッドではありません。