1

私はこれを稼働させるために数時間試しています。これまでのところ、メモリリークを発見しますが、それは1トンを発見し、それが現実的かどうかは分かりません。また、私は実際にメモリリークを解決できるようにファイルと行番号(私はそれが可能だが、私はそれを動作させることはできません)を見たいと思います。JNIを使​​用しているC++/JavaプロジェクトでCRTのツールを使用してメモリリークを検出するにはどうすればよいですか?

頻繁に呼び出されるメソッド(通常は1秒間に約60回)でメモリリークをダンプするコードを追加しましたが、大丈夫かどうかはわかりませんが、実際には "main "コードをどこに置くかを決めるのは難しいです。ここで

は、私が追加したものです。助けを

// This part is in the includes part of the file 
#define _CRTDBG_MAPALLOC 
#define _CRTDBG_MAP_ALLOC_NEW 
#include <stdlib.h> 
#include <crtdbg.h> 

#ifdef _DEBUG 
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) 
#define new DEBUG_NEW 
#endif 

// This part is in the method 
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
_CrtDumpMemoryLeaks(); 

ありがとう!

+0

tryakerや同様のデバッガを試してみてください - メモリリークやユーザオブジェクトを制御するのに役立ちます...バグのある行を示します。 –

+0

事は私のファイルは.jarであり、deleakerは.exeだけを受け入れます。 JNIを通じてC++コードを呼び出すJavaプログラムで動作する類似のツールをご存知ですか?ありがとう。 – Djeezus

+0

_CrtDumpMemoryLeaks()を常に呼び出すと、すべての割り当てがリークします。適切なトリガーにDllMain()を使用することを検討してください。 –

答えて

0

crtを使用すると、アクションを実行する前にメモリ状態を比較することができます。これを達成するには、単体テストで_CrtMemDifferenceを使用してください。コンセプトは、コードの別の部分を呼び出す単位テストを記述することで、_CrtMemCheckpointを使用する前と呼び出し後にアプリケーションメモリの状態を取得します。それでは、2つのチェックポイントを_CrtMemDifferenceと比較する必要があります。

関連する問題