xperf не может загрузить символы моей DLL - PullRequest
1 голос
/ 30 апреля 2010

Я пытаюсь использовать xperf для профилирования моей DLL, но он отказывается использовать файл PDB моей DLL. Запустив xperf на .etl с -symbols, я получаю:

DBGHELP: mydll- private symbols & lines
         C:\mydll\debugu\mydll.pdb - unmatched

Что заставляет меня верить, что мой PDB не соответствует DLL, используемой приложением. Это не верно; это соответствует. Я подтвердил путь к DLL, с которой связывается приложение, используя procxp, полностью перестроил проект и так далее. Он все еще думает, что не соответствует.

Есть идеи, что может быть не так?

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Извините, я задал этот вопрос и забыл об этом.

На самом деле было две проблемы.

Во-первых, xperf фактически использовал более старую кэшированную версию моих символов. Это было исправлено удалением из кеша символов.

Во-вторых, когда я загружал символы в xperfview, он фактически не помещал мою современную pdb в кэш символов. Однако pdb находился в каталоге, который, как я подтвердил, был включен в переменную _NT_SYMBOL_PATH. К сожалению, я не помню точную команду, использованную для исправления этого, но я считаю, что это был вариант ' xperf file.etl -symbols '. Эта команда правильно проанализировала etl и загрузила / кэшировала все соответствующие символы так, как встретила их. После этого xperfview мог корректно показывать мои символы.

Обратите внимание, что мне приходилось перезапускать команду каждый раз, когда менялся мой pdb, потому что xperfview по-прежнему не затрагивал ничего, чего еще не было в кэше символов. Я до сих пор не уверен, почему на моей машине так себя ведет, другие люди, похоже, не имеют этой проблемы.

2 голосов
/ 21 июля 2010

Попробуйте установить переменную среды SYSTEM _NT_SYMBOL_PATH, чтобы она указывала на ваш файл .pdb _NT_SYMCACHE_PATH, чтобы он указывал на c: \ Symbols. См. Документы по обработке символов XPerf на http://msdn.microsoft.com/en-us/library/ff191023(VS.85).aspx

На WindowsItPro dot com есть хорошая статья в блоге под заголовком «Под прикрытием с XPerf», посвященная передаче символов в XPerf.

Обратите внимание, что мне нужно было установить системную переменную среды с правильными значениями, настройка среды в пакетном файле не была выбрана xperfview (проверьте параметр меню Трассировка, Настроить путь к символу сразу после запуска XPerfView)

1 голос
/ 01 июня 2016

Я только что отправил ответ на аналогичный вопрос о SO, который может быть связан с проблемой, возникшей здесь ...

По сути, если DLL загружается динамически, это может вызвать проблемы для XPerf в отношении загрузки символов.

Лично я догадываюсь о том, что логика в XPerf решает, стоит ли хотя бы загружать символы для данного модуля. например «загрузить все EXE-файлы и их записи IAT» (что будет пропускать все динамические DLL-файлы - что, похоже, не так, но происходит нечто подобное)

EDIT:

Я недавно обсуждал это с коллегой и узнал, что XPerf правильно «решит» загрузить символы для DLL, загружаемых программным способом ... ЕСЛИ DLL остается загруженной до завершения процесса.

Таким образом, для библиотек DLL, которые загружены и выгружены во время выполнения и выгружены при завершении ... XPerf пропустит попытку загрузки этих символов.

...