13

一般に、定義にいくつかのプリプロセッサ条件付き要素を含むネストされたマクロのチェーンがときどきあります。実際のコードが実行されているのを直接見るのは難しいため、これらはデバッグが困難な場合があります。

少し前に、それらを展開するコンパイラ (gcc) フラグを見つけたのを漠然と覚えていますが、これを実際に機能させるのに苦労しました。

4

7 に答える 7

14

gcc -E は、前処理されたソースを stdout に出力します。

于 2008-09-19T23:39:31.290 に答える
8

MSVC ユーザーの場合、ファイル/プロジェクトを右クリックして設定を表示し、ファイルのプロパティを変更して、前処理されたソース (通常は obj ディレクトリにあります) を出力できます。

于 2008-09-20T00:10:28.330 に答える
5

これはあなたの状況には当てはまらないかもしれませんが、マクロは実際にデバッグを妨げ、多くの場合、使いすぎて回避できます。

それらをインライン関数に置き換えるか、まとめて削除できますか?

于 2008-09-20T00:11:38.297 に答える
2

おそらく、マクロから離れて、インラインとテンプレートの使用を開始する必要があります。

マクロは古いツールですが、適切なツールである場合もあります。最後の手段として、printf はあなたの友達であることを思い出してください (実際、マルチスレッド処理を行う場合、printf はそれほど悪い友達ではありません)。

于 2008-09-20T00:28:28.193 に答える
1

gcc -save-tempsは、Cプリプロセッサの出力である.i(またはC ++の場合は.iiファイル)を、コンパイラに渡される前に書き出します。これはしばしば啓発的です。

于 2008-09-20T06:58:21.017 に答える
1

読み込まれたシンボルで逆アセンブリをデバッグします。

于 2008-09-20T00:03:50.110 に答える
0

GCC および互換コンパイラは、-E オプションを使用して、前処理されたソースを標準出力に出力します。

gcc -E foo.cpp

Sun Studio は、次のフラグもサポートしています。

CC -E foo.cpp

しかし、さらに良いのは -xdumpmacros です。詳細については、Suns のドキュメントを参照してください。

于 2008-09-20T06:10:10.230 に答える