воскресенье, 15 марта 2009 г.

"Волшебный" CAB для WinDBG

Частенько оказывается, что дамп памяти, приносимый со стенда на анализ (если не удалось посмотреть проблему "вживую" нуждается в достаточно объемной пост-обработке, чтобы продолжить исследование :-(

Как оказалось, жизнь себе можно существенно облегчить...

В подключенной к процессу копии WinDbg/ntsd можно выполнить следующую последовательность команд:
.dump /ma <путь к первичному дампу (*.dmp)>

Затем нужно запустить вторую копию отладчика, указав загрузить только что созданный дамп и набрать такую последовательность команд:
.sympath <основной путь к символам операционной системы>
.sympath+ <основной путь к символам MSVC, которые, конечно же, поставлены на машину>
.sympath+ <основной путь к символам отлаживаемого приложения>
.sympath+ <строка для локального символьного сервера, если он доступен>
.symfix+ C:\Symbols
.reload /s /d /f
.dumpcab /a <путь к создаваемому архиву (*.cab)>

Примечания:
1) Eсли машина правильно сконфигурирована перед установкой системы, то все игры с каталогами не нужны - они уже прописаны в _NT_SYMBOL_PATH (часто бывает не так).
2) Все каталоги можно задать в одном вызове .sympath, если Вы люите очень длинные строки (в этом случае их разделяют точкой с запятой)
3) Если станция не подключена к внешней сети и Windows Update на ней не работает, то .symfix, вероятнее всего, не понадобится (но символы от операционной системы и сервис-паков должны быть установлены!).
4) Результата выполнения команды .dumpcab можно ждать ооочень долго (зато .CAB имеет очень высокую степень сжатия).

Что это нам дает?
Созданный .CAB будет содержать образы всех загруженных в процесс модулей (внутри дампа) и все .PDB-файлы, которые были использованы при развертке стеков потоков.
Когда архив поступит на машину разработчика - ему будет существенно легче осуществлять исследование - практически все необходимое (исключая исходные тексты) у него будет. Если настроить правильно связь с сервером исходных текстов при сборке продукта, то будут и они (будет осуществляться подгрузка по мере необходимости)...

Одно маленькое предостережение - переиндексация исходных текстов и обработка .PDB - процесс небыстрый, поэтому следует заранее это учитывать при составлении расписания автоматических сборок.

Да, кстати, кажется, symstore.exe не работает по Wine, так что идеи об индексации исходных текстов при кросс-компиляции придется отложить....

Комментариев нет: