0

メモリ検出用に boundsChecker を使用してソースを計測していますが、ネイティブの c/c++ 計測マネージャーのエラー検出タイプの計測でビルドすると、ビルド エラーが発生します。出力ウィンドウを見ると、NM2002: Inline Expansion (/Ob) used during instrumentation this error ..

しかし、インストルメンテーション タイプをパフォーマンスまたはカバレッジ分析として選択すると、ソースは正常にビルドされますが、メモリ リークをチェックするためにテストケースを実行すると、メモリ リークが表示されません。メモリリークを検出するためにインストルメンテーションを使用する必要があります..

4

2 に答える 2

0

/ Obnインライン化は、コンパイルパスの間にコードをインストルメントするときに、インストルメントされたコードのエラーを実際に引き起こす可能性があります。コードにはコンパイルの最初のパスが与えられ、一部のコードは可能なインライン化のためにマークされる場合があります。次に、すべてのインストルメンテーションを中間言語に追加します。次に、コンパイルの最終パスが作成され、インストルメンテーションを使用してコードをインライン化しようとすると、問題が発生する可能性があります。これが、可能であればインライン化を無効にし、必要に応じてエラーを生成する理由です。

どのVSバージョンを使用していますか?Devpartnerのどのバージョンですか?

メモリリークをキャッチするには、エラー検出を使用してコンパイルする必要があります。インライン化をオフにして、デバッグビルドのコンパイルも行うことをお勧めします。

編集私はVS2008とVS2010および現在の11.1リリース候補でいくつかのテストを実行しました

エラーは発生しませんでした

1>インストルメンテーションはインライン化をオフにするために(/ Ob0)を追加しています1> cl:コマンドライン警告D9025:「/Ob1」を「/Ob0」でオーバーライドします

警告1警告D9025:「/Ob1」を「/Ob0」でオーバーライドe:\ cust \ Anthony \ Test \ Test \ clテスト警告2警告D9025:「/Ob1」を「/Ob0」でオーバーライドe:\ cust \ Anthony \ Test \ Test \ cl Test

これらのメッセージは、インライン化を無効にしていることを示しています。警告をエラーとして扱う場合にのみ、これはエラーとして発生します。

于 2013-02-21T11:12:06.603 に答える
0

メモリ リークの検出に関しては、「メモリ トラッキング」サブシステムを有効にする必要があります。デフォルトで有効になっています。ただし、マネージ C/C++ によって割り当てられたメモリは追跡せず、アンマネージによってのみ追跡されます。

あなたのテストケースを共有していただけませんか?私は製品を保守している開発者の 1 人であり、必要に応じて NDA 契約を手配することができます。

于 2013-02-21T11:07:34.597 に答える