programing

C의 메모리 누출 감지기?

testmans 2023. 9. 12. 19:52
반응형

C의 메모리 누출 감지기?

사람들이 좋은 경험을 한 기억 누출 감지기는 무엇입니까?

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

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

Electric Fence - GDB와 연동되는 Tool

스플린트 - 주석 지원 경량 정적 점검

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

또한 이 스택 오버플로우 게시물을 참조하십시오.

두번째 발그라인드...전기 울타리를 추가하겠습니다.

리눅스하의 발그린드는 꽤 좋습니다. 윈도우하에서는 경험이 없습니다.

이 있다면: IBM Rational Purify는 C/C++를 위한 매우 강력한 산업 강도의 메모리 유출 및 메모리 손상 탐지기입니다.Windows, Solaris 및 Linux용으로 존재합니다.리눅스만 사용하고 저렴한 솔루션을 원한다면 Valgrind를 선택하십시오.

gcc용 머드플랩!실제로 검사를 실행 파일에 컴파일합니다.추가하기만 하면 됩니다.

-fmudflap -lmudflap

당신의 gcc 깃발로.

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

lint (splint라는 매우 유사한 오픈 소스 도구)

또한 glibc를 사용하는 리눅스에서 사용할 가치가 있는 것은 내장된 디버그 힙 코드입니다.사용방법은 -lmcheck로 링크하거나 MALLOC_CHECK_환경변수를 1, 2, 3의 값으로 정의(및 내보내기)합니다.glibc 설명서는 자세한 정보를 제공합니다.

이 모드는 더블 프리를 감지할 때 가장 유용하며, 프리를 수행할 때 할당된 메모리 영역 밖에서 쓰기를 찾는 경우가 많습니다.유출된 메모리는 보고하지 않은 것 같습니다.

아프긴 하지만 굳이 하나를 사용한다면..
DevPartner Bounds Checker 제품군을 추천합니다.제 직장 사람들이 이런 목적으로 사용하는 겁니다유료 독점..프리웨어가 아닌

메모리 유출 감지기에 대한 사랑은 거의 없어요일반적으로 위양성이 너무 많아서 아무 소용이 없습니다.저는 이 두 가지를 가장 덜 거슬리는 것으로 추천합니다.

글로우 코드

디버그 힙

메모리 유출에 대한 Win32 디버깅의 경우, 저는 비주얼 C의 lib로 제공되는 평이한 오래된 CRT 디버그 힙에 대해 매우 좋은 경험을 했습니다.

Debug build malloc(etal)에서 _malloc_dbg(etal)로 재정의되고 결과를 검색하는 다른 호출이 있는데, 이 호출들은 _DEBUG가 설정되지 않은 경우 모두 정의되지 않습니다.힙에 모든 종류의 경계 가드를 설정하고 언제든지 결과를 표시할 수 있습니다.

라이브러리 실행 시간 할당을 엉망으로 만든 시간 루틴을 _CRT_BLOCK_을 발견할 때까지 몇 가지 잘못된 긍정이 있었습니다.

처음에는 DOS를 만들고, 그 다음에는 Win32 콘솔과 영원히 실행될 서비스를 생산해야 했습니다.메모리 누수는 없는 것으로 알고 있으며, PC의 모니터가 고장나기 전에 적어도 한 곳에서 2년 동안 코드가 실행되었습니다(PC는 괜찮았지만!).

윈도우에서는 시각적 누출 감지기를 사용했습니다.VC++와 통합되어 사용이 간편하며(헤드라인을 포함하고 lib를 찾기 위해 LIB를 설정하기만 하면 됨), 오픈 소스, 자유롭게 FTW를 사용할 수 있습니다.

Unix Solaris에서 대부분의 일을 할 때 대학에서 gdb를 사용했습니다.

하지만 저는 리눅스에서 valgrind를 사용할 것입니다.

이러한 툴의 가장 큰 장점은 IBM에 판매된 후 UNICOM에 판매된 상업용 폐쇄형 소스 Purify 툴입니다.

파라소프트의 인슈어++(소스 코드 계측)와 발그린드(오픈 소스)도 실제 경쟁사입니다.

Trivia: Purify의 원작자인 Reed Hastings는 NetFlix를 설립했습니다.

클랑의 엠산에 대해서는 아무도 언급하지 않았는데, 이는 꽤나 강력합니다.하지만 공식적으로는 리눅스에서만 지원됩니다.

이 질문은 오래된 질문일 수도 있지만, 어쨌든 저는 대답할 것입니다. 아마도 제 대답이 누군가가 자신의 기억에 새는 것을 찾는 데 도움이 될 것입니다.

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

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

Windows 32 및 64비트 플랫폼이 지원되며 네이티브 및 혼합 모드 콜스택이 지원됩니다.

.NET 가비지 컬렉션이 지원되지 않습니다. (C++ cli의 gcnew 또는 C#의 new)

고성능 툴이며, 통합을 원하는 경우를 제외하고는 통합이 필요하지 않습니다.

전체 설명서는 여기에서 확인할 수 있습니다.

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

실제로 얼마나 많은 양의 정보가 유출되는지에 대해 두려워하지 마십시오.모든 과정에서 발생하는 메모리 유출을 파악합니다.전부가 아니라 가장 큰 누출만 분석합니다.

valgrind를 메모리 유출을 위한 외부 도구로 사용하겠습니다.
하지만 대부분의 문제를 해결하기 위해 항상 내부적으로 제작된 도구를 사용했습니다.외부 도구의 오버헤드가 너무 크거나 설치하기가 너무 복잡한 경우도 있습니다.

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

농담이지만 가끔은 간단한 것이 필요할 때도 있고 직접 쓰는 것이 더 빠릅니다.보통 저는 malloc()와 free()로 호출을 대체하고 누가 무엇을 할당하는지 더 잘 추적할 수 있는 함수로 대체합니다.제 문제의 대부분은 누군가가 자유롭게 하는 것을 잊어버린 것 같고 이것이 그 문제를 해결하는 데 도움이 됩니다.

정말로 어디에 누수가 있는지에 따라 달라지는데, 그걸 안다면 도구가 필요 없을 겁니다.하지만 만약 여러분이 그것이 어디서 새고 있다고 생각하는지에 대한 통찰력이 있다면, 여러분 자신의 기구를 넣고 그것이 여러분에게 도움이 되는지 알아보세요.

우리의 CheckPoint 도구는 GNU C 3/4 및 C의 MS 방언과 GreenHills C에 대해 이 작업을 수행할 수 있습니다.발그린드가 할 수 없는 메모리 관리 문제를 찾을 수 있습니다.

코드가 단순히 새는 경우 종료 시 CheckPointer는 모든 사용 불가능한 메모리가 할당된 위치를 알려줍니다.

언급URL : https://stackoverflow.com/questions/53426/memory-leak-detectors-for-c

반응형