Что означает PRIMARY_PROBLEM_CLASS STACKIMMUNE в WinDbg? - PullRequest
8 голосов
/ 30 января 2012

Как правило, я не могу найти список значений, которые могут содержать различные поля в выводе WinDbg команды !analyze -v.

Поиск затруднен из-за того, что выводКоманда часто публикуется без явного обращения к значениям полей (например, DEFAULT_BUCKET_ID и PRIMARY_PROBLEM_CLASS).Есть ли список ссылок?

Более конкретно: во время анализа дампа памяти выходные данные команды !analyze -v указали, что DEFAULT_BUCKET_ID и PRIMARY_PROBLEM_CLASS являются "STACKIMMUNE".Что это значит?

1 Ответ

7 голосов
/ 31 января 2012

Сначала небольшое введение в то, как работает !analyze.

Когда !analyze пытается определить причину нарушения доступа (и некоторых других типов исключений, например, SEH исключений , исключений C ++, целочисленное переполнение, деление на ноль и т. д.), он просматривает стек вызовов потока, выдавшего исключение, и выясняет, что находится в верхней части потока. Однако не все кадры стека полезны.

Например, для исключений C ++ вы увидите kernel32!RaiseException и your_module!__except_handler3 в верхней части стека. Эти кадры должны быть пропущены, поскольку они вряд ли являются причиной проблемы. Иногда !analyze приходится пропускать много кадров, чтобы добраться до интересного кадра. Просто посмотрите на пример другого вопроса о переполнении стека , где код ошибки составляет ~ 40 кадров ниже.

Чтобы ответить на ваш вопрос: STACKIMMUNE означает, что все кадры в стеке вызовов пропущены. Это может произойти, когда стек поврежден, или если у вас неправильные символы и вы используете !reload /i, чтобы игнорировать любые ошибки несоответствия, и, вероятно, во многих других случаях.

...