2014-09-17 2 views
-1

런타임 중에 올바르게 릴리스되지 않은 메모리를 식별하는 가장 좋은 방법은 무엇입니까? 응용 프로그램이 닫힐 때 할당되지 않은 (누수 된) 메모리를 식별하는 여러 프로그램을 알고 있습니다. 하지만 내 문제는 프로그램 실행 중에 (아마도 스레드) 시스템이 "작업"으로 완료된 후에도 해제되지 않은 일부 개체가 생성되는 것 같습니다.런타임 중에 릴리스되지 않은 메모리 식별

시스템을 계속 실행하면 시간이 지남에 따라 커집니다. 그러나 프로그램이 종료 될 때 메모리가 올바르게 해제 된 것처럼 보이고 그 순간에 내가 사용하는 MadExcept에서 누수로보고되지 않습니다.

"작업"이 실행될 때마다이 메모리를 할당하고 프로그램이 종료 될 때까지 메모리를 해제하지 않는 것이 가장 좋은 방법은 무엇입니까? 이것은 약 1 백만 줄의 코드, 여러 DLL 하위 프로젝트 및 여러 스레드 실행 (40-50)이있는 상당히 큰 서버 시스템에 있습니다.

아마도 X 분 이상 동안 살아있는 할당 된 개체를 식별 할 수있는 시스템이있을 수 있습니다. 60 분이 선택되고 시스템이 실행 중이라고 가정 해 봅시다. 그런 다음이 정보를 사용하여이 긴 생명체를 찾아 내서 조사 할 수 있습니다.

+0

누출 감지기 모드에서 [Boehm 's GC] (http://www.hboehm.info/gc/)를 사용할 수 있습니다. –

+1

나는 프로그래머가 고려해야 만했던 것을 고려한 보조 프로그램이 있다고 생각하지 않는다. 메모리에 액세스 할 수있는 한 객체를 삭제해야한다고 추측 할 수는 없습니다. – 101010

+0

40two : 문제가 있음을 이해합니다. 내가 이것을 처음부터 만들었다면 아마 그 원인을 알 수 있었을 것이다. 제가 생각한 것은 아마도 필터를 사용하여 60 분 이상 살아있는 모든 객체의 목록처럼 될 수있는 프로그램이 있다는 것입니다. 수명이 긴 동일한 유형의로드를 볼 수 있다면이를 조사 할 수 있습니다. – inquam

답변

0

의 평가판을 시도했습니다. Softwareverify의C++ 메모리 검사기.

그것은 내가 원하는 것과 똑같이 작동했으며 시간이 지남에 축적 된 것을 식별 할 수있는 메모리 할당 등의 타임 라인을 제공 할 수있었습니다. 그것을 사용하여 문제를 확인하고 해결할 수있었습니다.

0

C++ 및 Visual Studio를 사용하는 경우이 link이 유용하다고 생각합니다. 필요한 경우 _CrtMemCheckpoint 및 CrtMemDumpStatistics를 사용할 수 있습니다.

+0

"불행히도"프로젝트는 (C++ 빌더를 사용하는) Embarcadero RAD Studio 2010로 작성되었습니다. 그것은 VS하지만 슬프게도 사용하지 않았습니다 많은 시간을 빌고 :) – inquam

관련 문제