2011-04-08 5 views
1

저는 valgrind를 사용하여 메모리 문제를 찾고 추적합니다. 이제 다음과 같이하고 싶습니다.valgrind를 사용하여 두 지점 간 누수가 발생합니다.

before = getValgrindState(); 
do_something_curious(); 
after = getValgrindState(); 
difference = after - before; 
std::cout << difference; 

valgrind와 (과) 비슷한 기능이 있습니까?

  • _CrtMemCheckpoint (할당 된 메모리의 현재 상태를 수집하는)
  • _CrtMemDifference (두 상태 사이의 차이를 계산하기 위해)
:

단말 카메라 C++ 런타임은 다음과 같은 기능을 제공한다

그리고 valgrind와 비슷한 기능을 구현할 수있는 방법이 있는지 알고 싶습니다.

+0

제 목표는 do_something_curious() 함수가 실행 된 후에도 여전히 존재하는 객체를 찾는 것입니다. –

답변

0

무엇을 측정 하시겠습니까? "차이"란 무엇입니까? 메모리 사용량을 검사하려면 valgrind의 massif tool을 사용해보십시오. Massif Visualizer은 결과를 해석하는 데 유용합니다.

+0

차이점 객체는 할당 된 객체와 메모리가 있던 곳을 알려 주어야합니다. –

+0

다음 대산 괴를 살펴보십시오. –

1

원하는 것을 수행하는 원시적/파괴적인 방법은 소멸자를 호출하지 않으려면 _exit() (밑줄에 유의하십시오)을 사용하는 것입니다. 호출 코드에 대한/memcheck

  • 실행 Valgrind의 _exit() 이전
  • do_something_curious();에 실행 Valgrind의/memcheck 다시 _exit()
  • do_something_curious(); 후에는 do_something_curious() 주위에 남아 것을보고 결과를 비교와 함께.

[나는 대산 괴 당신이 원하는 일을 (대산 괴를 할 수있는 방법이 free/ delete 작업을 추적하고 내가 놓친 malloc/ new 작업? 화해) 할 방법을 알아낼 수 없었다]
+0

이 힌트를 가져 주셔서 감사합니다. 조금 더 수작업이 필요하지만 올바른 결과를 얻을 수 있어야합니다. –

+1

하나의 실행 만 사용하는 유사한 접근 방식은 _exit() 대신 VALGRIND_DO_LEAK_CHECK를 호출하는 것입니다. http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs를 참조하십시오. 두 보고서를 직접 비교해야합니다. – adl

관련 문제