2012-05-02 2 views
0

대량 코드 실행시 누수를 분석하려고했습니다. 누수가 dbx에서 발견되었으며 누수가 아래와 같이 표시됩니다.문자열 분석 메모리 누수 교환

Total  Num of Leaked  Allocation call stack 
    Size  Blocks Block 
        Address 
========== ====== =========== ======================================= 

272033 4431  -  operator new < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::__getRep < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::replace 

누가 이런 유형의 누출에 직면 했습니까? DBX 주석을 사용하여 누출을 분석 할 수 있습니까? 코드에서 누수 위치를 알아내는 거대한 코드이기 때문에

+3

실제로 누수가 확실합니까? 프로세스가 규모가 커지는 것을 보았습니까? 제가 물어 본 이유는 필자가 흔히 도구가 실제로 * 누수가 아닌 - 일반적으로 견고한 타사 코드 인 누출을보고 있다고 생각하기 때문입니다. –

+0

예, 프로세스 크기가 커지는 것처럼 보입니다. 스택의 전체 메모리가 손실되고 메모리가 없기 때문에 프로세스가 충돌하는 방식으로 커지고 있습니다. 이것은 재검사 테스트에서 반복적 인 프로세스가 진행되는 동안 발생합니다. – sandy

+0

음, 공정한 의견. 'Purify'(상업용 임에도 불구하고)와 같은 도구가 있습니다.이 도구는 어디서 일어 났는지 식별 할 수 있어야하지만 STL에 있으면 더 큰 문제입니다. 나는 또한 당신이 유용하다고 생각할 수있는 링크를 아래에 게시했다. –

답변

1

메모리 관리 문제를 식별하는 데 도움이되는 libumem으로 앱을 실행 해 봅니다.

비록 코드베이스가 거대하더라도 을 타겟으로 코드 리뷰를 통해이를 해결할 수 있습니다.

0

빠른 확인은 this issue과 비슷합니다. 그것은 꽤 오래되었지만 - 어떤 컴파일러 버전을 사용하고 있습니까?

동일한 문제가 있어도 전체 업그레이드가 가능하지 않은 경우 문제가 발생하지 않도록 해당 코드가 호출되는 위치를 분리하고 다시 작업해야합니다.