Наш ночной процесс сборки был сломан в течение длительного времени, так что он сгенерировал файлы PDB, которые были несколько разными по возрасту, чем соответствующие файлы изображений. С тех пор я исправил проблему.
Тем не менее, я хотел бы начать использовать сервер символов, но не могу из-за необходимости использовать эти несохраненные по возрасту файлы pdb. Я работаю над этой проблемой, используя метод .symopt + 0x40 в windbg. Это означает, что я должен организовать все мои файлы pdb вручную, и после многих лет выпуска, это добавляет.
Я ищу способ изменить механизм, который использует windbg для обозначения возраста pdb, и заставить его соответствовать моему файлу изображения. Утилита ChkMatch делает что-то подобное, но для подписи pdb. Разработчик заявляет на странице "ChkMatch способен сделать исполняемый файл и файл PDB совместимым, если у них разные подписи, но того же возраста" (см. Эту статью для получения дополнительной информации о подписи и возрасте PDB). Если возраст отличается, инструмент не может сделать файлы совпадают. "
Я заглянул внутрь гекседитора и даже нашел то, что было похоже на биты, соответствующие возрасту, но он должен вытащить еще несколько трюков изнутри, потому что я не мог заставить его работать.
Любые идеи?
ИЗМЕНИТЬ: Я не знаю, помогает ли это, но в моем конкретном случае разница по возрасту была вызвана ненужной перезагрузкой dll, которая также воссоздала бы файлы PDB. Однако в нашем процессе сборки хранились исходные dll (до релинка) и pdb после релинка. Я подумал о том, чтобы как-то воссоздать такую ситуацию вручную. Значение, заставляющее перезагружать DLL, но сберегая pdb в обоих случаях. Затем я мог бы выполнить двоичное сравнение двух файлов, чтобы посмотреть, как они изменились. Возможно, запустите какое-то программное обеспечение для исправления, которое делает это автоматически? Увидев, что именно изменилось в моем контрольном случае, возможно, я мог бы сделать то же самое с DLL и PDB, сохраненными в процессе сборки моих компаний?
ИЗМЕНИТЬ: Я ПОНЯЛ!!!! Благодаря одному из комментариев по первому ответу я проверил ссылку на pdf-книги книги "Недокументированные секреты Windows 2000: кулинарная книга программистов". И автор подробно рассказывает о формате файла pdb. Как я уже говорил, я уже загрузил pdb в шестнадцатеричный редактор и перевернул несколько бит вокруг появляющихся, что я сделал совпадение по возрасту/подписи, но это не сработало. Ну, после использования утилиты из книги секретов W2k, чтобы "взорвать" pdb во включенных потоках, я обнаружил, что они скрывают другую ссылку на возраст в потоке 3!!!!!!! Как только я перевернул его, он подобрался в windbg. ЭТО ОГРОМНОЕ!!!! Большое вам спасибо... сервер символов ЗДЕСЬ Я ПРИХОДИТ!