Как я могу перейти с Microsoft Symbol Server на Google Breakpad?

Наш продукт генерирует минидамп файлы на случай, если что-то пойдет не так. Мы запускаем сервер символов для хранения и доступа к символам отладки наших сборок, так что мы получаем правильные следы стека из файлов дампа.

Поскольку наш продукт также работает в других операционных системах (в частности, в Linux и OS X), мы начали изучать Google breakpad. Я, кажется, использовать мини-дампы, а также файлы PDB для хранения. Однако мне интересно:

(Как) я могу перенести существующий сервер символов на Google Breakpad, чтобы я не потерял все существующие символы? Я думаю, что другие люди уже сделали то же самое, может быть, есть какой-то общий подход к этому?

1 ответ

Решение

У вас есть несколько вариантов:

  1. Запустите dump_syms (это инструмент, который обрабатывает pdbs в текстовый формат breakpad.sym, поставляется с breakpad) на всех pdbs, уже находящихся на сервере, а затем загрузите их на свой сервер breakpad (есть несколько вариантов, мы используем socorro). Вы также должны будете продолжать использовать его на всех новых символах для сборок, которые вам интересны.

  2. запрашивать символы с сервера так, как они нужны stack_walker при обработке входящего сбоя (мы этого не сделали)

  3. периодически проверяйте пропущенные символы в последнем числе сбоев, проверяйте, находятся ли они на сервере символов, запускайте их с помощью dump_syms, загружайте.syms на сервер сбоев, а затем отправляйте сбои на повторную обработку.

Вам нужно будет использовать серверы символов MS для системных символов, поэтому вам придется реализовать один из более поздних вариантов именно для этого.

Мы выбрали вариант 3 для системных символов, но реализация во многом зависит от используемого сервера аварийного отказа (мы используем socorro crash-stats, а не рекомендуемую конфигурацию). Существует множество реализаций интеграции сервера символов MS на python. Из stack_walker вы узнаете имя и GUID символа, так что вы можете игнорировать PE-разбор частей.

Уловка, о которой нужно знать: в OSX нет концепции сервера символов, и аварийные дампы с панели управления там бесполезны. Чтобы восстановить трассировку стека из сбоя OSX, вам понадобится доступ к исходным системным двоичным файлам (чтобы запустить их через dump_syms). Это не всегда возможно. Вам нужно будет вручную создать хранилище символов OSX, см. Также это: https://wiki.mozilla.org/Breakpad:Symbols

Уловка № 2: Windows использует регистронезависимую FS (неожиданность), и иногда сгенерированные pdbs приводятся в нижнем регистре компоновщиком без уважительной причины (в то время как PE-бинарный код использует его по-прежнему, ссылаясь на надлежащий регистр). Это создает головную боль, если ваш аварийный сервер работает на * nix машине. Рассмотрите возможность извлечения имени символа из самого двоичного файла PE вместо того, чтобы полагаться на имя файла pdb в этом случае.

Уловка № 3: вам все равно нужно будет запустить сервер символов для отладки файлов дампа, загруженных с помощью панели управления (в случае, когда трассировки стека недостаточно, и вы хотите открыть дамп в Visual Studio). БП использует сервер символов, а не заменяет его.

Другие вопросы по тегам