Я пытаюсь найти утечку памяти в приложении Windows MFC 8.0 (Release build).Как получить доступ к полной трассировке стека mallocs в приложении MFC 8.0?
После неудачной попытки показать полные трассировки стеки распределений с использованием WinDbg (или UMDH) из-за VC8 CRT's malloc problem with FPO, я попытался применить предложенное решение here (т.е. с использованием LeakDiag с DbgHlp StackWalk включен), только чтобы понять, что делает LeakDiag НЕ генерировать файл журнала при мониторинге C Runtime Allocator, однако при мониторинге Windows Heap Allocator он действительно работает, но опять же трассировка стека заканчивается при вызове malloc.
Символы настроены правильно, так как я могу видеть имена функций, имена файлов, строки и т. Д. В сгенерированном файле.
Кто-нибудь знает, почему я не могу зарегистрировать C Runtime Allocator? и почему я не могу получить полную трассировку стека, даже если я использую API-интерфейс DbgHlp StackWalk?
Буду признателен за любой намек, который вы можете предоставить.
Дополнительная информация:
Как мой стек следы выглядеть следующим образом:
У меня это с помощью WinDbg. Адрес - это один из сообщений heap -l как просочившийся блок.
0:000> !heap -p -a 25b18400
address 25b18400 found in
_HEAP @ 2a70000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
25b183f8 0008 0000 [07] 25b18400 00021 - (busy)
Trace: 00a4
7c97d6dc ntdll!RtlDebugAllocateHeap+0x000000e1
7c959d18 ntdll!RtlAllocateHeapSlowly+0x00000044
7c92b298 ntdll!RtlAllocateHeap+0x00000e64
78134d83 MSVCR80!malloc+0x0000007a
Я уже пробовал Intel Parallel Studio, но он просто зависает ... он кажется довольно тяжелым, и мое приложение ... Кроме того, утечка памяти, которую я ищу, происходит только в производстве компьютер, в котором отсутствует инструмент разработчика. Я мог бы установить компилятор, но зачем беспокоиться о том, что IPS не может даже запускаться в моей машине разработки ... Я рассмотрю другие инструменты, которые вы упомянули. Спасибо за ваш ответ! –
Последние версии параллельной студии кажутся гораздо более надежными - бета-версии не были. Но вы можете хотя бы использовать GlowCode без компилятора. Насколько я могу судить, нужен только файл pdb. Недавно я оценил это. Хотя он дал некоторые внутренние ошибки, он работает в реальном времени, и я получил некоторые результаты. –
GlowCode кажется потрясающим профайлером и проверкой памяти, хотя у него были серьезные проблемы с профилированием моего приложения на выходные. Во всяком случае, это доказало свою эффективность и очень быстро, хотя я еще не смог найти утечку памяти ... но мне удалось получить полную статистику стека моего приложения MFC 8.0, поэтому я сразу приму ваш ответ , Спасибо! –