_CrtSetBreakAlloc がブレークポイントを引き起こさないのはなぜですか?
-
19-09-2019 - |
質問
Visual CRT のメモリ リーク検出ルーチンを使用しています。 <crtdbg.h>
;電話するとき _CrtDumpMemoryLeaks
プログラムの呼び出しごとに 1 つの割り当てが一貫して報告されます。
{133} normal block at 0x04F85628, 56 bytes long.
Data: < > B0 81 F8 04 B0 81 F8 04 B0 81 F8 04 CD CD CD CD
住所は異なりますが、 {133}
いつも同じです。
MSDN の指示によると、 メモリ割り当て番号にブレークポイントを設定する方法, この呼び出しで 133 番目の割り当てにブレークポイントを設定できるはずです。
_CrtSetBreakAlloc(133);
ウォッチウィンドウでも確認できます {,,msvcr90d.dll}_crtBreakAlloc
確かに133に設定されています。プログラムが終了した後も、リーク レポートには #133 が (さらに大きな数字とともに) リストされますが、ブレークポイントは発生しません。これはなぜでしょうか?また、ブレークポイントを発生させるにはどうすればよいですか?
関連する可能性のある情報:
- VS2008、「マルチスレッド デバッグ DLL」CRT を使用
- 私のコードはサードパーティ製品によってロードされる DLL です
- 「通常の」ブレークポイントは問題なく機能します。ステップスルーは正常に機能します。
__asm int 3
も正常に動作します。 - 他の値はありません
_crtBreakAlloc
ブレークポイントが発生します(とにかく私が試したものではありません) 133 はリークレポートの中で最も低い数字です
解決
主要額叩き...ワン "明白な" 理由は、の前にのブレークポイントが設定されました...
これは最初のリークが私のDLLが呼び出される前に発生することが判明しただけのことです。私は、DLLがアンロードされる_CrtDumpMemoryLeaks
呼び出すので、実際にはリークは、必ずしもありません - 。親アプリケーションがdeinitializing行われていないときに、
私の元の質問では、「潜在的に関連情報#4」について - よく私はいくつかの値を試してみましたが、何とかどれも133よりも高くなかった...
他のヒント
これは、例えば、聞こえます。アプリを破る必要があるLIBのリリースバージョンを使用している場合、それはそれを行うことはありません。それはあなたがサードパーティのアプリを使用しているため、この問題が発生している可能性があります。これは、非デバッグDLLは、実行時にデバッグ1の代わりにロードされていることも可能です。
アプリやDLLが実際にデバッグし、デバッグもあることながら、右DLL-Sはあなたのアプリケーションのためにロードされているかどうかを確認してください。 (時々、あなたが明示的にデバッガにdllファイルやexeファイルをロードする必要があります。)
これは私がこれについての詳細を見ることなく考えることができるすべてです...