일부 메모리 조각화 문제를 해결하는 중이고 문제가 왜 할당되는지 그리고 궁극적으로 누가 할당을 수행하는지 알아 내려고 노력했습니다. 그래서 usermode 스택 추적을 활성화하고 (gflags의 + UST 플래그) 덤프를 받았습니다. 내가 덤프를 분석하고! heap -p -a Some_Address를 사용할 때. 나는 스택 트레이스를 본다. 그러나 그것은 완전한 트레이스가 아니다. 나는 흔히 추적에 4-7 개의 기능 만보고 그 후에 멈 춥니 다. 스택에는 오류가보고되지 않지만 유감스럽게도 충분한 정보가 없습니다. 나는 할당의 무리를 검사하고 그들에는 모두이 동일한 문제가있는 것을 보인다. 나는 그것이 스택 데이터베이스의 크기일지도 모른다라고 생각했다. 그러나 나는 단지 그 일부를 잃어 버리는 것 대신에 전체 항목을 잃어 버릴 것으로 예상했을 것이다. 조회 가능한 스택의 전체 크기를 늘릴 수있는 방법이 있습니까? 몇 가지 예가 아래에 나와있는 스택 중 하나입니다.사용자 모드 스택 추적을 활성화 할 때 전체 스택 추적을 가져 오지 않는 이유는 무엇입니까?
0:000> !heap -p -a 3cb49008
address 3cb49008 found in
_HEAP @ 80000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
3cb49000 0fdd 0000 [07] 3cb49008 07ed0 - (busy)
Trace: 6b69
7c855014 ntdll!RtlAllocateHeapSlowly+0x00000041
7c83d9aa ntdll!RtlAllocateHeap+0x00000e9f
776bcfce ole32!CRetailMalloc_Alloc+0x00000016
77d0404a oleaut32!APP_DATA::AllocCachedMem+0x0000004f
77d04341 oleaut32!SysAllocStringByteLen+0x0000003c
77d03f9b oleaut32!ErrStringCopyNoNull+0x00000016
77d0456f oleaut32!VariantCopy+0x0000007e
3ff1946 xxxx!_variant_t::_variant_t+0x00000016
0:000> !heap -p -a 2774cfc8
address 2774cfc8 found in
_HEAP @ 3cc0000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
2774cfc0 0008 0000 [17] 2774cfc8 00020 - (busy)
Trace: 7de8
7c855014 ntdll!RtlAllocateHeapSlowly+0x00000041
7c83d9aa ntdll!RtlAllocateHeap+0x00000e9f
4f6ad17 xxxx!malloc+0x0000007a
0:000> !heap -p -a 3ca25e08
address 3ca25e08 found in
_HEAP @ 80000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
3ca25e00 0007 0000 [07] 3ca25e08 00020 - (busy)
Trace: 8588
7c855014 ntdll!RtlAllocateHeapSlowly+0x00000041
7c83d9aa ntdll!RtlAllocateHeap+0x00000e9f
776bcfce ole32!CRetailMalloc_Alloc+0x00000016
77d0404a oleaut32!APP_DATA::AllocCachedMem+0x0000004f
77d04341 oleaut32!SysAllocStringByteLen+0x0000003c
77d03f9b oleaut32!ErrStringCopyNoNull+0x00000016
77d0456f oleaut32!VariantCopy+0x0000007e
4f35abd xxxx!std::_Construct<_variant_t,_variant_t>+0x0000004d
궁금한 점이 있습니까? [프레임 포인터 생략] (http://msdn.microsoft.com/en-us/library/2kxx5t2c(v= VS.100) .aspx)에 빌드가 발생합니까? – eran
방금 프로젝트를 확인했는데 FPO를 사용하지 않는 것으로 보입니다. FPO 문제가 없어야합니다. – Zipper
vs2005 런타임은 fpo를 사용합니다. 아마도 당신이 의존하고있는 다른 제 3자를 수행 할 것입니다. – deemok