2011-06-30 12 views
2

Cでマクロをデバッグするときに問題があります。ブレークポイントを設定しようとすると、「ブレークポイントにヒットしません。 "面白いのは、このマクロではなく、ファイル内のすべてのものをデバッグできることです。私はすべてのシンボルファイルを正しく読み込み、クリーニングして再構築し、最適化を無効にしました。このマクロのデバッグがうまくいかない理由は何ですか?ここでは、(あなたがブレークポイントを設定しようとしている定義、呼び出しなどを確認するために役に立つかもしれません)十分なコンテキストを知らないVisual Studioでマクロをデバッグする際に問題が発生しました

+2

マクロをデバッグすることができました。可能であれば、私はそれらを使用しないでください。マクロをソースに展開してデバッグするのは大変なことでしたが、正常に動作していれば、マクロ形式に戻すことができます。 –

+0

私はこれを試して、これまでのところ働いています...助けてくれてありがとう! – anthv123

答えて

3

は、いくつかの推測です:

あなたはマクロ定義にブレークポイントを設定していますまたはそれはどこに呼ばれますか? 定義にそれを設定すると、それはまさにあなたが見るエラーです。 定義はプリプロセッサに、コード内の別の場所で置換を行うように指示しているので、コードがコンパイラに到達するまでに#defineの行が空行に置き換えられました。

ブレークポイントが使用されている場所に正しく設定している場合は、あなたが考えているマクロの定義を使用していて、マクロが条件付きでコンパイルされてコードが生成されていないことを確認してください。 これは、デバッグ出力などのいくつかのものを無効にする一般的な方法であり、それを呼び出す行に実行可能なコードを与えません(周囲に他の実行可能コードがない限り)。 これをチェックする1つの方法は、マクロ定義のすぐ隣に#error行を置くことです。もしそれが使用されていれば、コンパイラはエラーを吐き出します。

マクロ機能は単なるテキスト置換であり、呼び出すことで呼び出しの各行(各呼び出しごと)にすべてのコードを配置することに注意してください。実際にはデバッグすることはできません(ステッピング'multiline'マクロ関数に変換する)、前と後の状態を比較するだけで足りることができます。これは、複雑なマクロ機能が悪い考えである主な理由の1つです。

+0

さて、そうですね、ステップマルチラインデバッグを実行しようとしていました。私は本当にマクロが正確に何を理解していないと思う。あなたの洞察に感謝します! – anthv123

+0

プリプロセッサを考えると、もう少しパワフルな検索と置き換え、それ以上のものはありません。これは良いことと悪いことの両方です。あなたは悪いことの一つを見つけました。実際の結果が[Project Properties => C/C++ =>プリプロセッサ=>前処理されたファイルを生成する]であることを確認できるように、中間スタジオに出力することができます。 – WillW

関連する問題