Включить pdbs в установщик? - PullRequest
1 голос
/ 28 мая 2010

Есть ли причина не включать файлы pdb в установщик? У меня есть функция ведения журнала C ++, которая обходит стек и сообщает номера строк и имена файлов. Было бы здорово, если бы мои клиенты могли присылать мне логи с этой информацией. Однако им понадобятся файлы pdb. Есть ли минусы (кроме размера пакета установщика) в их развертывании?

Ответы [ 3 ]

3 голосов
/ 28 мая 2010

Два возможных недостатка:

  • Файл PDB может облегчить кому-либо обратный инжиниринг вашего приложения.
  • В результате предыдущего кто-то может ожидать, что сможет вызывать недокументированные функции в ваших DLL.

Если вас это не беспокоит, я не вижу никаких недостатков. Обратите внимание, что вам это не нужно. Как говорит Джон Зигель, вы сможете восстановить трассировку стека из аварийного дампа.

2 голосов
/ 28 мая 2010

Вы должны быть в состоянии достичь «номеров строк и имен файлов» без файлов PDB. Попробуйте использовать _FUNCTION_, _LINE_ и _FILE_. Подробнее здесь:

http://msdn.microsoft.com/en-us/library/b0084kay.aspx

0 голосов
/ 28 мая 2010

Вместо отправки файлов PDB ваш код обработки ошибок может создавать мини-дампы. См. Функцию MiniDumpWriteDump . Мини-дампы очень маленькие и могут быть легко отправлены по электронной почте. Если вы получаете файл дампа от клиента, вам нужны только файлы PDB.

ИМХО, это очень хорошая идея, чтобы ловить утверждения или неожиданные ошибки в вашем приложении, автоматически создавать мини-дамп и разрешать вашему приложению отправлять вам этот дамп. Если вам действительно по душе, вы создаете автоматизированную базу данных отслеживания ошибок, в которой хранятся эти мини-дампы. Затем вы можете узнать, какие ошибки наиболее распространены и должны быть исправлены в первую очередь. Случайно вы узнаете много нового о среде, в которой работает ваше приложение. Какие версии операционной системы наиболее распространены, какие антивирусные сканеры подключены к вашему приложению и т. Д.

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

...