Может ли WinDbg обнаруживать повреждение кучи памяти из-за недопустимого отключения? - PullRequest
5 голосов
/ 05 января 2012

Это была ошибка, которую я только что нашел! Ура. Ошибка произошла из-за неправильного downcasting, и действительно я использовал static_cast вместо dynamic_cast .

Мое приложение довольно большое, многопоточное и взаимодействует с другими приложениями. Так что отладка очень сложная. Я пытался использовать WinDbg , GFlags и Application Verifier без результатов. Конечно, потому что я не знаю, как использовать эти инструменты.

Можно ли найти повреждение кучи памяти из-за недопустимого даункастинга с использованием таких инструментов, как WinDbg? Если да, то как?

Ответы [ 2 ]

10 голосов
/ 06 января 2012

Команда Windbg! Heap –s –v может выявить поврежденную кучу

0:008> !heap -s -v

  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 
                (k)     (k)    (k)     (k) length      blocks cont. heap 
-----------------------------------------------------------------------------
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous
1 голос
/ 05 января 2012

РЕДАКТИРОВАТЬ: Комментарии ясно дали понять, что не-Windows параметры не являются жизнеспособными.В этом случае мне повезло с Purify раньше, но, к сожалению, это $$$.Однако я не знаком с другими инструментами проверки памяти Windows.

Что касается этого конкретного случая, то каждый раз, когда вы чувствуете себя подавленным, потратьте хотя бы минуту на размышления об альтернативном интерфейсе или дизайне, которые могут устранить необходимость.Ошибки и предупреждения компилятора, а также надежный дизайн могут найти множество ошибок, которые в противном случае заняли бы несколько часов.

...