2

私は Visual Studio 2010 (C++ を作成) を使用しており、#define 関数の呼び出しから発生する例外を分離しました。定義された関数は少し複雑で、例外が発生した場所を見つけるためにデバッガーでステップ実行できるようにしたいと考えています。これを行う方法はありますか?

関係は次のようになります: my.hで宣言されたサードパーティ クラスから継承するクラスを定義しtheir.hます。のサードパーティ クラスにtheir.hは、対象のマクロが含まれています。このマクロは、別のヘッダー (「macro.h」など) で定義されています。

4

2 に答える 2

2

デバッグする前に、マクロをソース コードに展開する必要があります。手動で行うか、Visual Studio にプリプロセッサ出力を生成させることができます。http://msdn.microsoft.com/en-us/library/8z9z0bx6(v=vs.80).aspxでは、VS 2005 のプロセスについて説明しています。次に、ソースを . Visual Studio のプリプロセッサによって生成された i ファイル。これは重要なプロジェクトにとっては苦痛なので、特に例外を引き起こす特定のマクロを特定したので、最初に手動で実行してみます。そのマクロだけを手動で展開してみてください。これらのプリプロセッサ生成の .i ファイルを相互参照に使用することもできます。
UPD: 問題のマクロが複数の場所で使用されている場合は、例外の原因となっている場所を特定することができます。デバッガーで実行し(完全なデバッグ情報が生成されていると仮定しますが、生成されていない場合は生成する必要があります)、例外時にコールスタックを確認します。その場所だけを拡大します。
注意: オープンソース コミュニティの特定のプロジェクトは、マクロをコードの難読化ツールとして使用することで有名です (リバース エンジニアリングによって企業秘密が発見されないようにするためだと思います)。幸運を祈ります...

于 2013-05-31T19:52:15.627 に答える