Можно ли загрузить несовпадающие символы в Visual Studio?

У меня есть минидамп Windows (код C) и соответствующий exe-файл. К сожалению, у меня нет точно совпадающих файлов .pdb, но у меня есть .pdbs, содержащие точно такой же код, только что созданный в разное время. В Windbg я могу использовать:

.symopt+0x40

Сказать ему загрузить что-нибудь, даже несовпадающие файлы символов. Это отлично работает в данном конкретном случае, и я могу получить правильный стек вызовов. Мне просто любопытно, есть ли в Visual Studio такая функция. Здесь мы используем практически все разные версии VS, поэтому не имеет значения, в какой они версии. Спасибо.


person Morinar    schedule 07.09.2010    source источник
comment
Это не совсем ответ на ваш вопрос, но вы окажете себе огромную услугу, стандартизировав последовательный набор инструментов разработки.   -  person 3Dave    schedule 07.09.2010
comment
У нас есть последовательный набор. Просто мы поддерживаем старые версии нашего программного обеспечения, и не было сочтено целесообразным переносить старые версии программного обеспечения на более новые версии Visual Studio.   -  person Morinar    schedule 07.09.2010


Ответы (5)


Переопределения нет, но плакат с этим question нашел способ изменить файлы PDB, чтобы они соответствовали EXE.

Благодаря одному из комментариев к первому ответу я просмотрел ссылку на PDF-файлы книги «Недокументированные секреты Windows 2000: поваренная книга программистов». И автор очень подробно описывает формат файла pdb. Как я уже сказал, я уже загрузил pdb в шестнадцатеричный редактор и перевернул некоторые биты, показывая, что я сделал совпадение возраста / подписи, но это не сработало. Что ж, после использования утилиты из книги секретов W2k, чтобы "взорвать" pdb на включенные потоки, я обнаружил, что они скрывают еще одну ссылку на возраст в потоке 3 !!!!!!! Как только я перевернул и этот, он совпал в windbg.

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

person Steve Townsend    schedule 18.10.2010
comment
Я закончил работу над этой проблемой, но хочу принять ответ, так как мне не нравится, что мой процент ответов ниже 100% ;-) Кажется, эта информация содержит наиболее полезную информацию, поэтому я принимаю ее. - person Morinar; 22.12.2010

Попробуйте эту утилиту:

Утилиту ChkMatch можно использовать для проверки совпадения исполняемого файла и файла отладочной информации. Его также можно использовать для обеспечения соответствия между исполняемым файлом и файлом отладочной информации, если они совместимы.

Дополнительную информацию о сопоставлении отладочной информации и связанных проблемах см. В этой статье.

Поддерживаемые форматы отладочной информации: DBG, PDB 2.0, PDB 7.0 ...

person Sanketh I    schedule 23.09.2010
comment
Я поддерживаю это, это решение. - person Alan Spark; 13.02.2017

Visual Studio и Windbg сопоставляют pdb, сравнивая отметки времени в заголовке Executable с отметками времени, хранящимися в файле pdb. Вы можете просмотреть метку времени, запустив dumpin / headers.

Я не использовал chkmatch, но изменение exe или pdb для соответствия друг другу должно работать нормально.

Имейте в виду, что этого метода может быть недостаточно для отладки вашего двоичного файла. Джон Роббинс в своей книге «Отладка Windows» (которую я могу порекомендовать) упоминает, что он видел разные результаты сборки из идентичного дерева исходных текстов, построенных почти в одинаковое время.

Всегда создавайте символы pdb вместе со своими сборками (включая сборки выпуска) и архивируйте их вместе с продуктами сборки и включайте файл .map для хорошей меры.

person persiflage    schedule 25.10.2010

Согласно этому сообщению, можно также использовать команды sos windbg в Visual Studio. Но я не уверен, что ".symopt" также попадает в эту категорию.

person RED SOFT ADAIR    schedule 08.09.2010

Мне сказали, что в VS2019 (ориентировочно 16.7 .. 16.8) они переключились на многопоточный генератор файлов PDB, чтобы ускорить это.

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

В итоге, даже более важно, чем раньше, использовать PDB, созданный с помощью EXE, а не другого.

person Jesse Chisholm    schedule 16.11.2020