c++ - studio - Depuración de la versión de lanzamiento en la máquina de un cliente
no se puede encontrar o abrir el archivo pdb visual studio (6)
El proceso que debe tener se ve así:
- Compila un ejecutable y genera un archivo PDB. Asegúrese de no realizar ningún cambio en el código utilizado para el ejecutable, o mantenga una copia de seguridad.
- Enviar el ejecutable al cliente. No es necesario enviar el archivo PDB. La única razón para hacerlo es si desea depurar en la máquina del cliente, o usar herramientas como Process Explorer para obtener un seguimiento de la pila con nombres de funciones en algún momento. Tampoco parecen ser aplicables en su caso.
- Si se trata de una máquina XP / 2003, utilice drwtsn32 para configurar la creación de un volcado de memoria. Si es Vista / 7/2008, drwtsn32 está retirado, y debe configurar WER en su lugar . Otra opción es usar ADPlus para lanzar su aplicación.
- Una vez que se produce el bloqueo, haga que se le entregue el volcado y cárguelo en Visual Studio. Debe tener exactamente el mismo código, ejecutable y PDB a mano para poder realizar la depuración sin problemas.
Nota:
- WinDbg es útil para la depuración en el entorno de producción. Es un depurador muy fuerte y portátil, pero si estás acostumbrado a VS, te sentirás más cómodo usándolo.
- Si creas un minidump, obtendrás seguimientos de pila y algunos valores de variables. Si crea un volcado completo, obtendrá el montón completo, incluidas todas las variables, y un archivo volcado mucho más grande ... Si la transferencia no es un problema, use volcados completos.
- Si se registra en Microsoft , puede tener acceso a los volcados creados cuando su programa falla en los sitios de los clientes. Es que molesto "¿Enviar la información a Microsoft?" ventana que aparece cuando se bloquea un proceso que enviará el volcado a MS, y tendrá acceso a él ...
Tenemos un archivo nativo de C ++ Win32 .exe creado con Visual Studio 2005 que funciona perfectamente en todas las máquinas que hemos probado internamente (XP de 32 bits, Vista de 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.
Al investigar en varios sitios web, encontré datos que indican que si envio los archivos PDB (vc80.pdb y projectName .pdb) junto con la versión de lanzamiento del ejecutable al cliente, hay alguna forma de generar minidumps cuando ocurre un bloqueo. Luego puedo cargar el volcado de memoria en Visual Studio y obtener un seguimiento de la pila y otra información útil. La utilidad Dr. Watson de Microsoft también parece estar involucrada en este proceso.
Pero no puedo encontrar instrucciones claras sobre los pasos a seguir para que esto suceda.
- ¿Qué archivos enviar?
- ¿Cómo conseguir que se genere un volcado?
- ¿Y cómo cargar esto en VS?
¿Puede alguien describir este proceso?
Escribí 2 artículos sobre DDj sobre la depuración post mortem, que podrían ayudarte:
Depuración Postmortem http://drdobbs.com/tools/185300443
y depuración post-mortem revisada http://drdobbs.com/architecture-and-design/227900186
el segundo artículo contiene código fuente para rellenar volcados de pila desde una máquina cliente con información simbólica recuperada desde archivos de mapa o pdb.
Podemos obtener volcados de memoria de nuestras versiones de lanzamiento en el campo y no necesitamos enviar los archivos pdb con nuestro producto.
Creamos llamadas para crear nosotros mismos el archivo de volcado de fallos en nuestro controlador de excepciones de nivel superior utilizando MiniDumpWriteDump (), creo. Pero incluso sin eso, puede hacer que el usuario genere el archivo de bloqueo en el punto del bloqueo mediante el administrador de tareas que creo que se menciona aquí: Instrucciones de MSDN para crear un archivo de volcado .
Una vez que tenga el archivo de volcado, el cliente lo cerrará y se lo enviará por correo y lo colocará en Visual Studio. Dentro de VS, usted elige Debug Mixed o Debug Native y utiliza su copia local de los pdb para mostrarle la pila de llamadas, etc.
Si su cliente está usando Vista SP1 o superior, puede configurar el sistema para generar un archivo de volcado local cada vez que una aplicación falla. Puede encontrar la documentación completa en el sitio de MSDN .
Puedes mantener todos tus PDBs privados. Solo son necesarios cuando analiza el archivo de volcado. Si desea realizar un seguimiento de los PDB correspondientes a las versiones del producto que envía, debe considerar el uso de un servidor de símbolos.
Siento tu dolor. Tenía que hacer eso hace un rato.
De todos modos, ¿has probado google Breakpad?
Breakpad es una biblioteca y un conjunto de herramientas que le permite distribuir una aplicación a los usuarios con información de depuración proporcionada por el compilador eliminada, registrar bloqueos en archivos compactos "minidump", enviarlos de vuelta a su servidor y producir trazas de pila de C y C ++ desde estos minidumps . Breakpad también puede escribir minidumps a petición de programas que no se han bloqueado.
Breakpad es utilizado actualmente por Google Chrome, Firefox, Google Picasa, Camino, Google Earth y otros proyectos.
Puede encontrarlo aquí: http://code.google.com/p/google-breakpad/
Hace las mismas cosas que las otras respuestas mencionadas, pero lo hace automáticamente, ahorrándole mucho tiempo y esfuerzo.
Hice esto hace algún tiempo y creo que seguí esta guía . Si no funciona, echa un vistazo a la utilidad Windbg. Recuerdo que no es necesario que la instales, simplemente copia y ejecuta, incluso desde una memoria USB.