3
我正在解決一些內存碎片問題,我一直在試圖弄清楚爲什麼事情正在分配以及誰最終做了分配。所以我啓用了進程的用戶模式堆棧跟蹤(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,因爲您可能依賴的其他第三方 – deemok