2

メモリ リークが発生しているという十分な証拠がある After Effects プラグインがいくつかあります。これを調査するために、vcc コンパイラ/ランタイムでメモリ リークの検出と分離をいじっています。次の方法でリーク検出を有効にしました。

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

そして、私はリークの素晴らしいダンプを取得します。ただし、ファイル名と行番号は取得できません。私の最善の推測では、これはアフター エフェクト exe によって消費される dll を構築しているためであり、プラグインではなく実行可能ファイルで #define を作成する必要があるためです (これは私のメンタル モデルに完全には適合しません)。これが実際に何を定義し、何を含んでいるかについてですが、それは私が思いつくことができる最高のものです)。

したがって、他のオプションは、特定のメモリ割り当て番号にブレークポイントを設定することです。ただし、リークしている割り当ては一貫した割り当て番号のセットではないため、それで成功することは限られています。

それで、ここに何かアイデアはありますか?このツールをより適切に使用する方法、またはこれを調査する他の方法はありますか? ありがとう!

4

1 に答える 1

1

これらの DLL を同じ#defines で再コンパイルする必要があります。これらは への呼び出しをmalloc()への呼び出しに変換しmalloc_dbg()、これによりダンプ内のファイル名と行番号が有効になります。「リーク検出」が行うのはこれだけです。各割り当てにはファイル名と行番号が渡され、保存されて後でダンプされます。への呼び出しはありませんmalloc_dbg()- ファイル名も行番号もありません。

また、リーク ダンプ (関連するすべての関数) はランタイムごとに行われます。ダンプは、必ずしもすべてのモジュールに対してではなく、現在のモジュール ランタイムのヒープに対して行われます。プロセス内に複数の C++ ランタイムが存在する可能性があるため (各 DLL を独自のランタイムにリンクすることができます)、期待するランタイムに対してダンプが行われないことがあります。

于 2011-09-22T06:41:42.230 に答える