Анализатор производительности Windows отсутствует событие ImageId - PullRequest
0 голосов
/ 26 августа 2018

У меня есть приложение, которое я хочу профилировать с помощью анализатора производительности Windows. Все это работает, но я не получаю никаких разумных следов стека из моего приложения.

Данное приложение является демонстрационным приложением. Это должно дать мне хорошее чувство, если все проверят. Затем я хочу профилировать другое приложение. Поскольку у меня есть полный контроль над моим демонстрационным приложением, я включил некоторые функции маркеров, которые должны отображаться в трассировке стека.

При запуске приложения в Windwos 7 1 Process Explorer показывает правильную трассировку стека для детали, которую я хочу профилировать. Вот трассировка стека с функциями маркера в строках 7 - 9:

Process Explorer Stack Trace

Поскольку я установил все инструменты для анализа производительности внутри виртуальной машины Windows 10 2 , я начал там профилирование. Первое, на что нужно обратить внимание: Process Explorer не показывает правильную трассировку стека. Функции маркеров, которые я реализовал, нигде не найдены.

Тем не менее, я записал трассировку производительности, используя UIforETW и Windows Performance Recorder . Когда они открываются в WPA и фокусируются на целевом приложении, это трассировка стека:

WPA Stack Trace

Вся интересующая меня информация отсутствует. Стек отображается как <Application>.exe!<Missing ImageId event>

Что я сделал не так?


Если это подсказывает вам, вот соответствующее программное обеспечение, которое установлено:

1: на компьютере с Windows 7 установлена ​​Visual Studio (C #).

2: В виртуальных машинах Windows 10 нет Visual Studio, но установлены WinDBG (Preview) и Windows Performance Toolkit.

Я пометил , потому что целевое приложение написано на Delphi.

1 Ответ

0 голосов
/ 08 октября 2018

Windows 10 WPA (а также Windows 8.1, в меньшей степени) отказались от поддержки старых форматов символов отладки; теперь он поддерживает только формат «RSDS», который был стандартным со времени MSVC 7. PE-файлы, использующие более старые форматы файлов символов (например, VB6 генерирует файлы NB10 PDB), приведут к ошибке «Отсутствует событие ImageId».

(само сообщение технически неверно; вероятно, даже в файле трассировки есть ImageId, но оно ищет событие ImageId / DbgID_RSDS, которое не может быть сгенерировано для PDB не-RSDS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...