Кто-нибудь знает, почему я не могу войти в систему C Runtime Allocator?
Вы используете сборку Debug? Debug CRT имеет свою собственную проверку кучи, которая побеждает UMDH и другие инструменты, которые работают в глобальной куче ОС. Убедитесь, что при использовании UMDH и друзей все функции отладки кучи MFC и MSVCRT выключены .
Возможно, также вы или кто-то в вашем процессе изменили порог распределителя для малых блоков со значения по умолчанию 0.
В противном случае CRT версии 8.0 должен просто пересылать запросы в глобальную кучу, что вам и нужно для инструментов отладки кучи.
и почему я не могу получить полную трассировку стека, даже если я использую DbgHlp StackWalk API?
Я думаю, что Скайвинг довольно подробно описал детали в ссылках, которые вы дали. Просто для повторения, часть, которую он, возможно, недооценил, - это «на x86», «идеальные» трассировки стека, как правило, невозможны, так как нет метаданных, связанных с конкретной функцией (за исключением символов отладки), которая описывает, как раскрутить мимо этого ". Для DbgHlp весьма непрактично разматывать функцию (например, malloc MSVCRT), используя EBP в качестве регистра с нуля.
Конечно, вы можете пересобрать свою собственную библиотеку CRT из исправленных источников или попробовать заменить CRT malloc / free.
Действительно, я думаю, что вашим лучшим шагом будет воспроизведение утечки на платформе x64, где разматывание стека гарантированно будет достаточно надежным.