Использование symstore.exe не может загрузить символы для мини-дамп в Windbg или Visual Studio

Чтобы отследить сбой в Qt, который происходит только на компьютере пользователя Windows 8, я настроил локальный сервер символов для отладки дампов сбоя.

Сначала я сделал полную сборку со следующими установленными флагами:

QMAKE_CFLAGS_RELEASE += -Zi
QMAKE_CXXFLAGS_RELEASE += -Zi
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF

и построил установщик, используя установщик Windows и проект развертывания VS. Затем я запустил следующую команду symstore.exe:

C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64>symstore.exe add /r /f C:\builddir\*.* /s "C:\Users\Sam\symbols" /t "Application" /v "rev xxxx" /c "test add"

Это создало соответствующие папки dll, exe и pdb внутри C:\Users\Sam\symbols,

Затем я установил на компьютере пользователя и с помощью Process Explorer сгенерировал файл мини-дамп. Я попытался загрузить дамп в Visual Studio и добавить C:\Users\Sam\symbols к местоположениям файла символов, но не найдено соответствующих символов для моих двоичных файлов.

Затем я попытался загрузить его в WinDbg64 (это 64-битное приложение). Я поставил !sym noisy установите путь к символу с помощью .symfix C:\Users\Sam\symbols и перезагрузил с .reload /f, Это также не имело успеха, и только символы экспорта были загружены. Например:

QtGui4  No data is available : SRV*C:\Users\Sam\symbols*http://msdl.microsoft.com/download/symbols
The SYMSRV client failed validating the GUID for the module, or the
module does not have the debug header information.

Это происходит для всех модулей, но я не ожидал бы этого вообще для компонентов Qt, так как они не собраны как часть обычной сборки, и даже установка папки символов в папку lib, непосредственно содержащую файлы pdb, не помогает.

Затем я попытался запустить ChkMatch.exe против исполняемого файла и файла pdb в моем хранилище символов. Подпись исполняемого файла совпадает с папкой, в которой находится pdb, что указывает на то, что они должны совпадать, но затем я получил следующую ошибку:

Debug information file:
Format: PDB 7.00
Error: PDB header - too many pages in root stream.

Я побежал ChkMatch.exe снова против установленного исполняемого файла на всякий случай, но получил ту же подпись и ту же ошибку.

Редактировать:
Я пробовал настройку symopt+0x40 что должно заставить WinDbg использовать pdbs в любом случае, не слишком тщательно проверяя GUID подписи. Однако он все еще ничего не загружает. Дополнительный вывод:

SYMSRV:  C:\Users\Sam\symbols\QtGui4.dll\5202030497e000\QtGui4.dll not found
...
SYMSRV:  C:\Users\Sam\symbols\QtGui4.dbg\5202030497e000\QtGui4.dbg not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/QtGui4.dbg/5202030497e000/QtGui4.dbg not found
DBGHELP: .\QtGui4.dbg - file not found
DBGHELP: .\dll\QtGui4.dbg - path not found
DBGHELP: .\symbols\dll\QtGui4.dbg - path not found
DBGHELP: QtGui4.dll missing debug info.  Searching for pdb anyway
DBGHELP: Can't use symbol server for QtGui4.pdb - no header information available
DBGHELP: QtGui4.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for QtGui4.dll -
DBGHELP: QtGui4 - export symbols

Папка в C:\Users\Sam\symbols\QtGui4.dll имеет имя 4AA92D1B712000 и содержит то, что должно быть правильным DLL.

2

Решение

Мне удалось решить это самостоятельно в конце концов. Сначала мне пришлось удалить и заново создать хранилище символов с нуля, используя описанные выше шаги. Я думаю, что сначала я испортил свой магазин, запустив symstore.exe дважды с одинаковым номером версии в разных папках.

Сделав это, я смог загрузить аварийные дампы и увидеть символы для библиотек Qt, но только до двадцати кадров и ни один из других модулей не был загружен. Затем я хотел скопировать этот стек, но не смог из окна стека в WinDbg и так нашел k Команда распечатать стопку. Это было «Ага!» момент, потому что k Команда распечатала намного больше, чем окно стека и обнаружила переполнение стека. Я обнаружил, что может быть передан дополнительный параметр для глубины стека для печати и k 0xFFFF распечатал всю стопку.

1

Другие решения

Для работы с minidump вы также должны загрузить бинарные файлы в symstore

0

По вопросам рекламы [email protected]