문제

사람들이 어떤 메모리 누수 감지기에 대해 좋은 경험을 했나요?

지금까지의 답변을 요약하면 다음과 같습니다.

발그린드 - 동적 분석 도구를 구축하기 위한 계측 프레임워크입니다.

전기 울타리 - GDB와 함께 작동하는 도구

부목 - 주석 지원 경량 정적 검사

글로우 코드 - C++, C# 또는 .NET Framework를 사용하여 애플리케이션을 개발하는 Windows 및 .NET 프로그래머를 위한 완벽한 실시간 성능 및 메모리 프로파일러입니다.

이것도 보세요 스택오버플로우 포스트.

도움이 되었습니까?

해결책

두 번째 발그린드...그리고 내가 추가할게 전기 울타리.

다른 팁

발그린드 리눅스에서는 상당히 좋습니다.나는 Windows에서 이것에 대한 경험이 없습니다.

돈이 있다면: IBM Rational Purify C/C++를 위한 매우 강력한 업계 최고의 메모리 누수 및 메모리 손상 감지기입니다.Windows, Solaris 및 Linux용으로 존재합니다.Linux 전용이고 저렴한 솔루션을 원한다면 Valgrind를 선택하십시오.

머드플랩 gcc를 위해!실제로 검사를 실행 파일로 컴파일합니다.그냥 추가하세요

-fmudflap -lmudflap

귀하의 gcc 플래그에.

Lint(Lint라는 매우 유사한 오픈 소스 도구 부목)

Linux에서 glibc를 사용하는 경우 내장된 디버그 힙 코드도 사용할 가치가 있습니다.그것을 사용하려면 다음과 연결하십시오. -lmcheck 또는 MALLOC_CHECK_ 값이 1, 2 또는 3인 환경 변수입니다. glibc 매뉴얼에서 더 많은 정보를 제공합니다.

이 모드는 이중 해제를 감지하는 데 가장 유용하며, 해제를 수행할 때 할당된 메모리 영역 외부에 쓰기를 찾는 경우가 많습니다.메모리 누수를 보고하지 않는 것 같습니다.

나는 꽤 많은 히트를 쳤다. cppcheck, 정적 분석만 수행합니다.오픈 소스이며 명령줄 인터페이스가 있습니다(다른 방법으로는 사용하지 않았습니다).

고통스럽지만 꼭 사용해야 한다면..
나는 DevPartner BoundsChecker 모음곡..그것이 내 직장의 사람들이 이 목적으로 사용하는 것입니다.유료 n 독점..프리웨어가 아닙니다.

나는 메모리 누수 감지기에 대해 최소한의 사랑을 받았습니다.일반적으로 어떤 용도로도 사용하기에는 잘못된 긍정이 너무 많습니다.나는 방해가 가장 적은 것으로서 다음 두 가지를 추천합니다.

글로우코드

디버그 힙

메모리 누수에 대한 Win32 디버깅의 경우 Visual C와 함께 lib로 제공되는 기존의 일반 CRT 디버그 힙을 사용하여 매우 좋은 경험을 했습니다.

디버그 빌드에서 malloc(et al)은 _malloc_dbg(et al)로 재정의되고 결과를 검색하기 위한 다른 호출이 있으며, _DEBUG가 설정되지 않은 경우 모두 정의되지 않습니다.힙에 모든 종류의 경계 가드를 설정하고 언제든지 결과를 표시할 수 있습니다.

_CRT_BLOCK을 발견할 때까지 라이브러리 런타임 할당을 엉망으로 만드는 일부 시간 루틴을 알고 있을 때 몇 가지 잘못된 긍정이 있었습니다.

나는 먼저 DOS를 제작해야 했고, 그다음에는 영원히 실행될 Win32 콘솔과 서비스를 제작해야 했습니다.내가 아는 한 메모리 누수는 없으며 적어도 한 곳에서는 PC 모니터가 고장나기 전까지 2년 동안 코드가 무인으로 실행되었습니다(PC는 괜찮았지만!).

Windows에서는 시각적 누출 감지기.VC++와 통합되어 사용하기 쉽고(헤더를 포함하고 lib를 찾기 위해 LIB를 설정하기만 하면 됨) 오픈 소스이며 FTW를 무료로 사용할 수 있습니다.

대학에서 Unix Solaris에서 대부분의 작업을 수행할 때 나는 다음을 사용했습니다. gdb.

그러나 나는 함께 갈 것이다 발그린드 리눅스에서.

이 도구의 조상은 상업적인 비공개 소스입니다. 정화하다 IBM에 판매된 후 UNICOM에 판매된 도구

파라소프트의 보험++ (소스 코드 계측)과 valgrind(오픈 소스)가 다른 두 실제 경쟁자입니다.

하찮은 일:Purify의 원저자인 Reed Hastings가 NetFlix를 설립했습니다.

언급된 사람 없음 clang의 MSan, 이는 매우 강력합니다.하지만 공식적으로는 Linux에서만 지원됩니다.

이 질문은 오래되었을 수도 있지만 어쨌든 대답하겠습니다. 아마도 내 대답이 누군가가 메모리 누수를 찾는 데 도움이 될 것입니다.

이것은 내 프로젝트입니다. 오픈 소스 코드로 넣었습니다.

https://sourceforge.net/projects/diagnostic/

Windows 32 및 64비트 플랫폼이 지원되며 기본 및 혼합 모드 호출 스택이 지원됩니다.

.NET 가비지 수집은 지원되지 않습니다.(C++ cli의 gcnew 또는 C#의 new)

고성능 도구이며 통합이 필요하지 않습니다(실제로 통합을 원하지 않는 한).

전체 매뉴얼은 여기에서 찾을 수 있습니다:

http://diagnostic.sourceforge.net/index.html

실제로 프로세스에서 누출을 얼마나 많이 감지하는지 두려워하지 마십시오.전체 프로세스에서 메모리 누수를 포착합니다.전체가 아닌 가장 큰 누출만 분석하십시오.

두 번째로 메모리 누수에 대한 외부 도구로 valgrind를 사용하겠습니다.
하지만 제가 해결해야 했던 대부분의 문제에 대해서는 항상 내부적으로 구축된 도구를 사용해 왔습니다.때로는 외부 도구에 오버헤드가 너무 많거나 설정하기가 너무 복잡합니다.

직접 작성할 수 있는데 왜 이미 작성된 코드를 사용합니까? :)

농담이지만 ​​때로는 간단한 것이 필요할 때도 있고 직접 작성하는 것이 더 빠릅니다.보통 나는 단지 malloc () 및 free ()로 전화를 대체하여 누가 무엇을 할당하는지 더 잘 추적하는 기능으로 대체합니다.내 문제의 대부분은 누군가가 무료로 제공하는 것을 잊어버린 것 같으며 이는 해당 문제를 해결하는 데 도움이 됩니다.

누출 위치에 따라 달라지며, 이를 알고 있다면 도구가 필요하지 않습니다.그러나 누출이 발생한다고 생각되는 위치에 대한 통찰력이 있다면 자체 계측 장치를 설치하고 도움이 되는지 확인하십시오.

우리의 체크포인터 도구는 GNU C 3/4, MS 언어 C 및 GreenHills C에 대해 이 작업을 수행할 수 있습니다.Valgrind가 찾을 수 없는 메모리 관리 문제를 찾을 수 있습니다.

코드가 단순히 누출되는 경우 종료 시 CheckPointer는 해제되지 않은 모든 메모리가 할당된 위치를 알려줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top