Ограниченная трассировка стека в Process Explorer - PullRequest
0 голосов
/ 10 февраля 2010

У меня есть процесс, работающий под Windows Server 2003 SP2. Когда я хочу проверить трассировку стека одного из его потоков, он всегда ограничен 9 записями. Эти записи разрешены правильно (у меня есть PDB на месте), но список просто в середине.

Знаете ли вы какие-либо ограничения в Process Explorer?

1 Ответ

1 голос
/ 30 марта 2010

Я предполагаю, что вы думаете, что полная трассировка стека для этого потока должна содержать более 9 записей. Вы не упоминаете, 32-битная ОС или 64-битная ОС, но я буду предполагать 32-битную ОС, а затем рассмотрим 64-битную как запоздалую мысль.

Иногда при сборе трассировки стека в 32-разрядных системах вы не можете собирать какие-либо элементы для трассировки стека, или вы можете собирать только ограниченное количество информации стекового фрейма, даже если вы знаете, что стэк вызовов глубже. Причины этого:

  • Различные соглашения о вызовах помещают данные в разные места в стеке, что затрудняет обход стека. Я могу вспомнить 4 определения, 3 в общем, одно экзотическое: cdecl, fastcall, stdcall, naked.

  • Для выпусков сборки оптимизатор кода может покончить с указателями кадров, используя метод, известный как пропуск указателей кадров (FPO). Без FPO (а иногда даже с данными FPO в файле PDB) вы не сможете успешно пройти стека вызовов.

  • Хуки - любые вспомогательные DLL, антивирусы, хуки отладки, инструментированный код, вредоносные программы и т. Д. Могут в какой-то момент испортить колл-стэк, потому что они вставили собственный код-заглушку в колл-стэк, и этот небольшой раздел не может проходить мимо стека.

  • Байт-код виртуальных машин. В зависимости от того, как написана виртуальная машина, виртуальная машина может размещать батуты в стеке вызовов, чтобы облегчить ее выполнение. Это сделает стек сложным для успешного прохождения.

Из-за разнообразия соглашений о вызовах в 32-битной Windows (как от Microsoft, так и от других поставщиков) трудно понять, чего ожидать при переходе от одного кадра к другому.

Для 64-битных систем определено одно соглашение о вызовах. Это делает жизнь намного проще. Тем не менее, у вас все еще есть проблемы вспомогательных DLL и хуков, которые делают свое дело со стеком, и это может все еще вызывать проблемы при обходе стека.

Сомневаюсь, что в Process Explorer есть ограничение. Я думаю, что проблема заключается только в том, что обход стека вызовов для этого потока проблематичен из-за одной из перечисленных выше причин.

...