一般に、定義にいくつかのプリプロセッサ条件付き要素を含むネストされたマクロのチェーンがときどきあります。実際のコードが実行されているのを直接見るのは難しいため、これらはデバッグが困難な場合があります。
少し前に、それらを展開するコンパイラ (gcc) フラグを見つけたのを漠然と覚えていますが、これを実際に機能させるのに苦労しました。
gcc -E は、前処理されたソースを stdout に出力します。
MSVC ユーザーの場合、ファイル/プロジェクトを右クリックして設定を表示し、ファイルのプロパティを変更して、前処理されたソース (通常は obj ディレクトリにあります) を出力できます。
これはあなたの状況には当てはまらないかもしれませんが、マクロは実際にデバッグを妨げ、多くの場合、使いすぎて回避できます。
それらをインライン関数に置き換えるか、まとめて削除できますか?
おそらく、マクロから離れて、インラインとテンプレートの使用を開始する必要があります。
マクロは古いツールですが、適切なツールである場合もあります。最後の手段として、printf はあなたの友達であることを思い出してください (実際、マルチスレッド処理を行う場合、printf はそれほど悪い友達ではありません)。
gcc -save-tempsは、Cプリプロセッサの出力である.i(またはC ++の場合は.iiファイル)を、コンパイラに渡される前に書き出します。これはしばしば啓発的です。
読み込まれたシンボルで逆アセンブリをデバッグします。
GCC および互換コンパイラは、-E オプションを使用して、前処理されたソースを標準出力に出力します。
gcc -E foo.cpp
Sun Studio は、次のフラグもサポートしています。
CC -E foo.cpp
しかし、さらに良いのは -xdumpmacros です。詳細については、Suns のドキュメントを参照してください。