Pregunta

Tenemos un C ++ Win32 nativo construido con Visual Studio 2005 que funciona sin problemas en todas las máquinas que hemos probado internamente (XP 32 bits, Vista 32 bits y Windows 7 de 64 bits). Pero, por supuesto, se bloquea repetidamente en la máquina Vista de 32 bits de un cliente.

Excavando en varios sitios web, encontré cositas que indican si envío los archivos PDB (VC80.PDB & nombre del proyecto.pdb) Junto con la compilación de lanzamiento del ejecutable al cliente, hay alguna forma de generar minidumps cuando se produce un bloqueo. Luego puedo cargar el volcado de choque en Visual Studio y obtener un rastro de pila y alguna otra información útil. El Dr. Watson Utility de Microsoft también parece estar involucrado en este proceso.

Pero no puedo encontrar ninguna instrucción clara sobre los pasos a seguir para que esto suceda

  • ¿Qué archivos enviar?
  • ¿Cómo obtener un volcado de choque para generar?
  • ¿Y cómo cargar esto en VS?

¿Alguien puede describir este proceso?

¿Fue útil?

Solución

Podemos obtener volcados de choque de nuestra versión acumulada en el campo y no necesitamos enviar los archivos PDB con nuestro producto.

Construimos llamadas para crear el archivo de volcado de choque nosotros mismos en nuestro controlador de excepciones de nivel superior usando minidumpwritedump (), creo. Pero incluso sin eso, podría hacer que el usuario genere el archivo de bloqueo en el punto del bloqueo usando el administrador de tareas que creo como se menciona aquí: Instrucciones de MSDN para crear un archivo de volcado.

Una vez que tiene el archivo de volcado, el cliente se extiende y se lo envía por correo y lo deja caer en Visual Studio. Dentro de VS, luego elige el nativo de depuración o depuración de depuración y utiliza su copia local de los PDB para mostrarle la pila de llamadas, etc.

Example from a dump I just created from a MS process

Otros consejos

El proceso que debería tener se ve así:

  1. Compile un ejecutable y genere un archivo PDB. Asegúrese de no realizar ningún cambio en el código utilizado para el ejecutable, o mantener una copia de seguridad.
  2. Envíe el ejecutable al cliente. No es necesario enviar el archivo PDB. La única razón para enviarlo es si desea depurar en la máquina del cliente, o utilizar herramientas como Process Explorer para obtener un rastro de pila con nombres de funciones en algún momento. Ninguno parece ser aplicable en su caso.
  3. Si es una máquina XP/2003, use DRWTSN32 para configurar la creación de un volcado de bloqueo. Si es Vista/7/2008, DRWTSN32 está retirado y debe configurar En su lugar. Otra opción es usar Adplus Para iniciar tu aplicación.
  4. Una vez que ocurra el choque, le devuelva el volcado y cárguelo en Visual Studio. Debe tener exactamente el mismo código, ejecutable y PDB en cuestión para depurar sin problemas.

Nota:

  • WindBG es útil para depurar en el entorno de producción. Es un depurador muy fuerte y es portátil, pero si estás acostumbrado a VS, te sentirás más cómodo usándolo.
  • Si crea un minidump, obtendrá rastros de pila y algunos valores de variables. Si crea un volcado completo, obtendrá el montón completo, incluidas todas las variables, y un archivo de volcado mucho más grande ... Si la transferencia no es un problema, use volcados completos.
  • Si usted Regístrese en Microsoft, puede tener acceso a vertederos creados cuando su programa se bloquea en los sitios de los clientes. Es ese molesto "Enviar la información a Microsoft"? Ventana que obtiene cuando se bloquea un proceso que enviará el volcado a MS, y tendrá acceso a él ...

Siento tu dolor. Tuve que hacerlo hace un tiempo.

De todos modos, ¿has probado Google Breakpad?

Breakpad es una biblioteca y una suite de herramientas que le permite distribuir una aplicación a los usuarios con información de depuración proporcionada por compiladores eliminados, registrar bloqueos en archivos compactos de "minidump", enviarlos de regreso a su servidor y producir trazas de pila C y C ++ de estos Minidumps . Breakpad también puede escribir minidumps a solicitud de programas que no se han bloqueado.

Breakpad es utilizado actualmente por Google Chrome, Firefox, Google Picasa, Camino, Google Earth y otros proyectos

Lo puedes encontrar aquí : http://code.google.com/p/google-breakpad/

Hace las mismas cosas que las otras respuestas mencionadas, pero lo hace automáticamente, le ahorra mucho tiempo y esfuerzos

Hice esto hace algún tiempo y creo que seguí esta guía. Si no funciona, consulte la utilidad WindBG, recuerdo que no necesita instalarlo, simplemente copie y ejecute, incluso desde un palo USB

Escribí 2 artículos sobre DDJ sobre la depuración post mortem, que podría ayudarte:

Depuración postmortemhttp://drdobbs.com/tools/185300443

y depuración post mortem revisitadahttp://drdobbs.com/architecture-and-design/227900186

El segundo artículo contiene el código fuente para llenar los volcados de la pila de una máquina cliente con información simbólica recuperada de los archivos MAP o PDB.

Si su cliente está utilizando Vista SP1 o superior, puede configurar el sistema para generar un archivo de volcado local cada vez que se bloquea una aplicación. Puede encontrar la documentación completa en el Sitio MSDN.

Puedes mantener todos tus PDB en privado. Esos solo son necesarios cuando realmente analiza el archivo de volcado. Si desea realizar un seguimiento de los PDB correspondientes a las versiones del producto que envía, debe considerar fuertemente usar un servidor de símbolos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top