Windows를위한 좋은 Valgrind 대체품이 있습니까?


210

Valgrind에서 Linux 전용임을 발견했을 때 C 코딩 / 디버깅을 개선하는 데 도움을 요청했습니다. OS를 Linux로 옮기는 데 다른 필요 나 관심이 없으므로 Windows 용으로도 좋은 프로그램이 있는지 궁금합니다.


어떤 종류의 디버깅을 원하십니까? Valgrind는 매우 풍부한 도구 세트이며 아래 답변은 모든 종류의 방향을 가리 킵니다. 메모리 누수 / 할당 디버깅에 중점을 둡니다.
jakobengblom2

1
확인해야 할 때 Windows 내부의 가상 Linux 시스템에서 코드를 테스트 할 수 있습니다. 가상 머신과 비가 상 머신간에 개발 폴더를 공유 할 수 있습니다. 즉, 코드가 충분히 이식 가능한 경우입니다.
Liran Orevi 09 년

답변:


29

더 좋은 상용 도구 :


1
정화 : 기업 소유권이 얼마나 많은 변화를 겪었는지 보여 주듯이, 유서 롭지 만 여전히 유용합니다!
Norman Ramsey

2
Insure ++는 코드를 인스트루먼트하고 런타임에 코드를 실행하는 데 영원히 걸립니다.
C Johnson

117

jakobengblom2가 지적했듯이 valgrind에는 도구가 있습니다. 당신이 말하는 것에 따라 다른 창 카운터 부분이 있습니다. 여기서는 OSS 또는 무료 도구에 대해서만 언급 할 것입니다.

1. MemCheck :

닥터 메모리. 이 도구는 비교적 새로운 도구이며 Windows 7에서 매우 잘 작동합니다. 가장 좋아하는 기능은 보고서에서 동일한 누수 할당 스택을 그룹화한다는 것입니다.

http://code.google.com/p/drmemory/

또한 UMDH ( http://support.microsoft.com/kb/268343 )를 사용 했으며 조용하고 설치하기 쉬운 것이 었습니다. Win2000에서 Win7까지 작동합니다.

AppVerifier는 Windows 기본 코드 개발자를위한 스위스 나이프가 있어야합니다. "메모리"검사기는 유사한 작업을 수행합니다. http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind :

내가 가장 좋아하는 것은 매우 졸리다 ( http://www.codersnotes.com/sleepy ) 작지만 매우 유용하고 사용하기 쉽다.

더 많은 기능이 필요한 경우 AMD CodeAnalyst ™ 성능 분석기는 무료입니다 : http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx

Windows 성능 분석 도구는 Microsoft에서 제공하지 않으므로 사용하기 쉽지는 않지만 시간을 할애하여 작업을 수행 할 수 있습니다. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx 다운로드 : http://msdn.microsoft.com/en-us/performance / cc752957

3. 대산 괴 :

Windows의 비슷한 (정확하지 않은) 무료 도구는 다음과 같습니다.

sysinternals의 VMMap : http://technet.microsoft.com/en-us/sysinternals/dd535533

windbg의! heap 명령 : http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html

4. Cachegrind :

위에서 언급 한 Windows 성능 도구에는 일정 수준의 L2 캐시 미스 프로파일 링 기능이 있지만 Cachegrind만큼 사용하기 쉽지는 않습니다.

5. DRD :

Windows에서 무료로 강력한 것을 찾지 못했지만 Windows에서 유일하게 사용할 수있는 유일한 무료 도구는 AppVerifier의 "잠금"검사기입니다. http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx


2
도 있습니다 gperftools (구 구글 PerfTools) . valgrind 대체는 아니지만 (실제로) 새로운 malloc, CPU 프로파일 러, 힙 프로파일 러 및 검사기가 있습니다. Linux 및 Windows (inc Mingw) 및 기타 유니스를 지원하므로 가치가 있습니다.
alexr

30

Valgrind + Wine을 사용하여 Windows 앱을 디버깅하지 않겠습니까? http://wiki.winehq.org/Wine_and_Valgrind를 참조 하십시오

(Chromium은이를 사용하여 Windows 버전의 메모리 오류를 확인합니다. build.chromium.org를 참조하여 실험 또는 메모리 워터 폴을보고 와인을 검색하십시오.)

Dr. Memory도 있습니다. dynamorio.org/drmemory.html 참조


3
따라서 Windows 앱을 디버깅하지 않을 것이므로 Linux 앱을 디버깅 할 것입니다.
John Dibling

33
와인을 다시 컴파일 할 필요가 없습니다. .exe와 .pdb를 Linux 상자로 옮기십시오. 그리고 당신은 리눅스 앱을 디버깅하지 않을 것입니다; 정확한 Windows 앱을 디버깅하고 있습니다.
Dan Kegel

2
정확히, 절름발이 클론보다 실제 물건을 사용하는 것이 좋습니다 : D Love valgrind.
대안

11
좋은! Windows에서는 리눅스를 실행하고 거의 vm 와인에서 valgrind vm으로 소프트웨어를 실행하는 가상 머신을 실행할 수 있습니다. windows vm 내부에서 Linux를 실행하는 vm에서 Windows를 실행하는 경우 보너스 포인트 :)
Imbrondir

15

Visual C ++의 경우 Visual Leak Detector를 사용해보십시오 . 그것을 사용할 때 new호출 에서 메모리 누수가 감지되어 누수의 소스 코드에서 실제 줄을 반환했습니다. 최신 릴리스는 http://vld.codeplex.com/ 에서 찾을 수 있습니다 .


그것은 나를 위해 작동하지 않는 것 같습니다. 심지어 메모리를 할당하지 않고 기본적으로 아무것도하지 않는 간단한 프로젝트를 만들려고했습니다. VLD가 감지하지 못했습니다. :-|
Synetech

@Synetech Inc. 나는 VLD의 최신 버전은 내 문제 해결 사용 ... VS2010에서 동일한 문제가 있었다
relaxxx

14

사용중인 Windows 용 개발 환경에는 자체 도구가 포함되어있을 수 있습니다. 예를 들어 Visual Studio를 사용하면 프로그램에서 메모리 누수감지하고 격리 할 수 있습니다.


6
실용성이 거의 없다. 위반 할당에 대한 파일 이름 / 줄 번호를 기록하지만 malloc을 직접 호출하는 경우에만 정보를 제공합니다. new / delete를 사용할 때, new.h를 "불쾌한"코드로 잘못 가리킬 것입니다.
user9665 2009

3
새 / 삭제가 사용 되어도 올바른 줄을 가리키며 올바르게 작동합니다.
Rodrigo

그러나 라이브러리 함수가 할당되면 작동합니까? 예 : strdup.
Alex Budovski 2009

1
Valdrind는 메모리 누수를 훨씬많이 발견합니다. 주로 사용되지 않는 초기화되지 않은 스택 및 힙 메모리를 사용하여 디버깅하기가 매우 어려울 수 있습니다.
ideasman42

1
@ user9665 시각적 누출 감지기 ( vld.codeplex.com )는 최소한의 소스 코드 변경으로 각 메모리 누수에 대한 전체 콜 스택을 제공합니다. 사이트에서 예제 확인
KindDragon

14

나는 몇 가지 도구를 나열하고 싶습니다, 희망은 유용 할 것입니다

자세한 내용 은 이 기사 를 읽으십시오

  1. 정화
  2. 바운드 검사기
  3. 커버리지 (기본적으로 코드 분석기이지만 정적 메모리 누수를 잡을 것입니다)
  4. 글로우 코드
  5. 달록
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. 발 그린 드
  10. mpatrol
  11. 보험 +


12

Windows 용 디버깅 도구에는 Pageheap.exe 부분이 있습니다. 무료이며 기본적으로 커스텀 메모리 할당 자 / 할당 자입니다.

http://support.microsoft.com/kb/286470을 참조 하십시오.


Pageheap / gflags는 일부 불쾌한 힙 손상 문제를 해결하는 데 도움이되었습니다.
the_mandrill 2016 년

나는 진단에 도움이 되는 gflags+ gdb(mingw에서)를 발견했습니다 .
Jarekczek

8

Visual Studio와 함께 일반적으로 Visual Leak Detector 또는 win32 api 호출 인 _CrtDumpMemoryLeaks ()를 사용합니다. 둘 다 멋진 것은 아니지만 작업을 완료합니다.


6

과거에 Compuware DevPartner Studio 를 사용할 기회 가 있었는데 정말 좋았지 만 비용이 많이 듭니다. 더 저렴한 솔루션은 GlowCode 일 수 있으며 방금 5.x 버전으로 작업했으며 디버깅 해야하는 프로세스에 연결하는 데 문제가 있음에도 불구하고 꽤 잘 작동했습니다.


고가입니다. 일주일 만에 프로파일 러를 사용하여 상환했습니다.
EvilTeach



4

" 소스 테스트 도구를 참조하십시오유사한 도구 목록은 Software QA Testing and Test Tool Resources 페이지 "링크를 참조하십시오.

과거에는 BoundsChecker, DevPartner Studio 및 Intel V-Tune을 프로파일 링에 사용했습니다. 나는 V-Tune이 가장 좋았습니다. 다양한 인텔 칩셋을 에뮬레이션 할 수 있으며 해당 플랫폼에 대한 최적화 방법에 대한 힌트를 제공합니다.



3

LeakDiag, UMDH, App Verifier, DebugDiag는 모두 코드의 견고성을 개선하고 메모리 누수를 찾는 데 유용한 도구입니다.


3

Boost Test 라이브러리는 메모리 누수를 감지 할 수 있습니다.


3

방법에 대한 퓨리 ?


실제로 무료는 아니지만 테스트 목적으로 테스트 라이센스를 찾을 수있을 것 같습니다.
David Rodríguez-dribeas

BoundsChecker의 2011-02-04 기준으로 죽은 링크.
dwj



2

Borland / CodeGear / Embarcadero C ++ Builder로 개발하는 경우 CodeGuard를 사용할 수 있습니다.


2

거의 모든 프로파일 러에는 메모리 누수 검사가 포함되며 메모리 할당시 스택이 표시됩니다.

Intels Parallel Inspector를 추천 할 수 있습니다 . 사용이 간편하고 재 컴파일이 필요하지 않습니다. 평가판은 30 일 동안 실행됩니다.

GlowCodeAtromatedQA 에는 이러한 기능이 포함됩니다. 그들은 모두 무료 평가판을 제공합니다.

Contrast의 Compuware DevPartner (일명 BoundsChecker)는 "악기"재 컴파일 속도를 늦춰야하며 오류를 확인할 때 응용 프로그램도 느리게 실행됩니다. 그리고 BoundsChecker는 64 비트 버전에서는 전혀 작동하지 않습니다. 우리는 그 도구를 포기했습니다.


2
글로우 코드를 확실히 추천합니다. 과거에 내 앱에서 호출하는 dll 내에서 메모리 누수를 찾는 데 사용했습니다.
Bob

마지막 직장에서 DevPartner를 사용하는 동안 주요 속도 저하에 대한 불만이있었습니다. 속도가 느려서 사용을 피하기 위해 모든 것을합니다.
Calyth



2

mingw를 두려워하지 않는다면 다음 링크가 있습니다 (일부 링크는 MSVC에서 작동 할 수 있음) ... http : //betterlogic.com/roger/? p = 1140


2

GCC 및 Micrsoft Visual C (C ++ 아님)를 처리하고 베타 테스터를 찾고있는 Windows 용 메모리 안전 검사 도구 를 완성했습니다 .

2011 년 6 월 12 일 수정 : 더 이상 베타 버전이 아니며 이제 GCC 및 Microsoft Visual Studio C 용으로 제작되었습니다.




1

C ++ 메모리 누수 / 손상 및 초기화되지 않은 변수, 포인터 오류, 문자열 등과 같은 다른 많은 버그를 찾는 데 탁월한 역할을하는 Insure ++를 사용했습니다. 또한 시각적 인 "코드 적용"및 런타임 메모리 사용 등을 통해 더 많은 확신을줍니다. 코드를 추적 할 수 있습니다.



1

IBM Purify 평가판 에 RuntimeChecker 평가판을 사용해 볼 수 있습니다 .

무료 솔루션은 Visual Studio에서 다음 코드를 사용하는 것입니다.

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

모든 cpp 파일의 맨 위에 이것을 작성하십시오. 디버그 실행을 중지하면 응용 프로그램의 메모리 누수를 감지하고 출력 창에 나열합니다. 메모리 누수 라인을 더블 클릭하면 메모리가 할당되고 해제되지 않은 라인이 강조 표시됩니다. 도움이 될 수 있습니다 : http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.