Наш ночной процесс сборки был нарушен на долгое время, так что он генерировал файлы 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. ЭТО ОГРОМНОЕ !!!! Большое вам спасибо .... символ сервера ЗДЕСЬ Я ИДУ!