Отладка сборки релиза на машине клиента - PullRequest
16 голосов
/ 09 сентября 2011

У нас есть собственный C32 Win32 .exe, созданный с использованием Visual Studio 2005, который работает безупречно на всех машинах, на которых мы тестировали свои собственные (XP 32-битная, Vista 32-битная и Windows 7 64-битная).Но, конечно, он постоянно вылетает на клиентском 32-битном компьютере с Vista.

Копаясь на нескольких сайтах, я обнаружил лакомые кусочки, которые указывают, отправляю ли я файлы PDB (vc80.pdb & projectName .pdb) вместе со сборкой Release исполняемого файла для клиента существует некоторый способ создания мини-дампов при возникновении сбоя.Затем я могу загрузить аварийный дамп в Visual Studio и получить трассировку стека и другую полезную информацию.Утилита Microsoft Watson, похоже, также участвует в этом процессе.

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

  • какие файлы отправлять?
  • как получить аварийный дампбыть сгенерированным?
  • и как загрузить это в VS?

Может кто-нибудь описать этот процесс?

Ответы [ 6 ]

11 голосов
/ 09 сентября 2011

Мы можем получать аварийные дампы из наших выпусков Release в полевых условиях, и нам не нужно отправлять файлы pdb вместе с нашим продуктом.

Мы сами создаем вызовы для создания файла аварийного дампа вЯ считаю, что обработчик исключений верхнего уровня с использованием MiniDumpWriteDump ().Но даже без этого вы могли бы заставить пользователя сгенерировать файл сбоя в момент сбоя, используя диспетчер задач, который я верю, как упомянуто здесь: MSDN Инструкции по созданию файла дампа .

Получив файл дампа, клиент заархивирует его и отправит вам по почте, а вы перетащите в Visual Studio.В VS вы выбираете Debug Mixed или Debug Native, и он использует вашу локальную копию pdb, чтобы показать вам стек вызовов и т. Д.

Example from a dump I just created from a MS process

6 голосов
/ 09 сентября 2011

Процесс, который вы должны иметь, выглядит следующим образом:

  1. Скомпилируйте исполняемый файл и сгенерируйте файл PDB.Убедитесь, что вы не вносите никаких изменений в код, используемый для исполняемого файла, или сохраняйте резервную копию.
  2. Отправьте исполняемый файл клиенту.Нет необходимости отправлять файл PDB.Единственная причина сделать это - если вы хотите выполнить отладку на компьютере клиента или использовать инструменты, такие как Process Explorer, чтобы в какой-то момент получить трассировку стека с именами функций.Похоже, что и то, и другое не применимо в вашем случае.
  3. Если это машина XP / 2003, используйте drwtsn32 для настройки создания аварийного дампа.Если это Vista / 7/2008, drwtsn32 удален, и вы должны настроить WER вместо .Другой вариант - использовать ADPlus для запуска приложения.
  4. После сбоя доставьте дамп обратно и загрузите его в Visual Studio.Для бесперебойной отладки у вас должен быть точно такой же код, исполняемый файл и PDB.

Примечание:

  • WinDbg полезен для отладки в производственной среде.Это очень сильный отладчик, и он переносим, ​​но если вы привыкли к VS, вам будет удобнее его использовать.
  • Если вы создадите мини-дамп, вы получите трассировки стека и некоторые значения переменных,Если вы создадите полный дамп, вы получите полную кучу, включая все переменные - и намного больший файл дампа ... Если передача не является проблемой, используйте полные дампы.
  • Если вы зарегистрируйтесь в Microsoft , вы можете получить доступ к дампам, созданным при сбое вашей программы на сайтах клиентов.Это то, что раздражает "Отправить информацию в Microsoft?"окно, которое появляется, когда происходит сбой процесса, который отправит дамп в MS, и вы получите к нему доступ ...
5 голосов
/ 09 сентября 2011

Я чувствую твою боль. Пришлось сделать это некоторое время назад.

В любом случае, вы пробовали Google Breakpad?

Breakpad - это набор библиотек и инструментов, который позволяет вам распространять приложение для пользователей с предоставленной компилятором отладочной информацией удален, записывает сбои в компактных файлах "минидамп", отправляет их обратно ваш сервер, и производить трассировки стека C и C ++ из этих мини-дампов. Breakpad также может писать мини-дампы по запросу для программ, которые имеют не разбился.

Breakpad в настоящее время используется Google Chrome, Firefox, Google Picasa, Camino, Google Earth и другие проекты

Вы можете найти его здесь: http://code.google.com/p/google-breakpad/

Он делает то же самое, что и другие упомянутые ответы, но делает это автоматически, экономя ваше время и усилия

3 голосов
/ 09 сентября 2011

Я написал 2 статьи на DDj об отладке после смерти, которая может вам помочь:

посмертная отладка http://drdobbs.com/tools/185300443

и Повторная отладка после смерти http://drdobbs.com/architecture-and-design/227900186

вторая статья содержит исходный код для заполнения дампов стека с клиентского компьютера символической информацией, полученной из файлов карты или pdb.

3 голосов
/ 09 сентября 2011

Я сделал это некоторое время назад, и я думаю, что следовал этому руководству . Если это не работает, проверьте утилиту Windbg, я напомню, вам не нужно устанавливать ее, просто скопируйте и запустите, даже с USB-накопителя

1 голос
/ 03 октября 2011

Если ваш клиент использует Vista SP1 или выше, вы можете настроить систему на создание локального файла дампа при каждом сбое приложения. Вы можете найти полную документацию на сайте MSDN .

Вы можете хранить все свои PDB в секрете. Они нужны только тогда, когда вы действительно анализируете файл дампа. Если вы хотите отслеживать PDB, соответствующие версиям поставляемого вами продукта, вам настоятельно рекомендуется использовать сервер символов.

...