2014-09-18 8 views
2

Windows의 기본 코드에서 메모리 누수를 격리하려고합니다.DebugDiag 호출 스택에 호출 스택의 함수 줄 수가 표시되지 않습니다.

테스트 케이스를 여러 번 반복 실행하여 의심되는 누출 (PerfMon에서 여러 번 실행하여 메모리 누출이 확인 됨)에 대한 정보를 수집하는 프로세스에 DebugDiag를 연결했습니다.

는 DebugDiag 지금

내가 제대로 문자를 구성한
Call stack sample 1 

Address 0x0f09e2c0 

Allocation Time 00:22:38 since tracking started 

Allocation Size 8.54 KBytes 

    Function          Source destination 
    ntdll!RtlpReAllocateHeap+19c     ntdll!RtlAllocateHeap 
    ntdll!_except_handler4  
    ntdll!RtlReAllocateHeap+22f     ntdll!RtlReAllocateHeap 
    sqlncli11!MpReallocZeroMemory+66  
    sqlncli11!SQLReAllocateMemoryEx+22   sqlncli11!MpReallocZeroMemory 
    sqlncli11!AllocPlex+1a4      sqlncli11!SQLReAllocateMemoryEx 
    sqlncli11!SetADRec+2a4      sqlncli11!AllocPlex 
    sqlncli11!SQLBindCol+217      sqlncli11!SetADRec 
    odbc32!SQLBindCol+3c0  
    sscfdm!CSSLockSqlCursor::DoExecuteStmt+11a  
    sscfdm!CSSSqlCursor::Execute+129    sscfdm!CSSLockSqlCursor::DoExecuteStmt 
    sscfdm!CSSSqlObj::Execute+d86     sscfdm!CSSSqlCursor::Execute 
    sscfom!CSSBusComp::SqlExecute+3a    sscfdm!CSSSqlObj::Execute 
    <<many multiple lines below>> 

같은 의심스러운 호출 스택을 지적 내가 호출 스택에서 더 많은 정보를 추출 할 방법을 알고 싶었다.

  1. UMDH 로그에는 diff 로그에 줄 번호 (파일 이름 포함)가 있습니다. 그러나 DebugDiag 보고서에서 해당 함수의 줄 번호를 찾지 못했습니다. 함수가 너무 길면 라인 번호가 없어도 호출 스택을보고 컨텍스트를 설명하기가 어려워집니다. DebugDiag 로그에서 함수 (파일)의 행 번호를 추출 할 수있는 방법이 있습니까?

  2. 호출 스택의 각 module!function 항목이있는 16 진수 오프셋의 중요성을 알고 싶습니다.

  3. 호출 스택의 할당 크기는 얼마입니까? 이 호출 스택 실행 당 해제되지 않은 할당 된 메모리 (따라서 누출)입니까?

  4. DebugDiag 기능에 대한 포괄적 인 문서를 가리키는 모든 포인터가 있습니까?

답변

0

UMDH 로그는 자신은 diff 로그 (파일 이름 포함)도 줄 번호가 있습니다. 그러나 디버그 진단 보고서에서는 해당 함수의 행 번호를 찾지 못했습니다.

그럼 UMDH 로그로 이동하십시오.

각 호출 스택에 module!function 항목이있는 16 진수 오프셋의 중요도.

16 진수 오프셋은 컴파일 된 메소드의 특정 어셈블러 명령어를 가리 킵니다. 소스 코드의 줄 번호 오프셋과 대략적으로 관련되어 있지만 컴파일러 최적화에 크게 영향을받을 수 있습니다.

호출 스택의 할당 크기는 얼마입니까? 그것은 ... 해제되지 않은 할당 된 메모리입니다

...이 호출 스택의 실행 당?

아니요. 동일한 방법을 다시 실행하면 다른 크기가 할당 될 수 있습니다. 얼마나 많은 메모리가 할당되는지에 대한 매개 변수에 의존하는 AllocateSomeMemory(int bytes)과 같은 함수를 고려하십시오.

죄송합니다 DebugDiag 기능에 대한 포괄적 인 문서에 대한 모든 포인터, 나는 내 머리 떨어져 좋은 사이트를 말할 수 없습니다.