2010-12-17 10 views
7

Uno de mis compañeros de trabajo envió una compilación de revisión a un cliente y posteriormente eliminó el archivo pdb. La compilación en cuestión se está bloqueando (de forma intermitente) y tenemos un par de volcados. Tenemos todo el código fuente en control de versiones, y podemos compilarlo en un .exe equivalente y obtener símbolos para ese. Sin embargo, esos símbolos no coinciden exactamente con el volcado de emergencia. Parece que varias de las funciones están desactivadas por un desplazamiento constante, pero solo hemos visto un puñado.¿Es posible regenerar símbolos para un exe?

Me encantaría poder hacer lo siguiente (puedo falsificar partes de esto manualmente, pero es una gran cantidad de trabajo): obtener un seguimiento de pila para cada hilo en el volcado y punteros fundidos en el volcado a el tipo apropiado y haga que aparezcan en el depurador de Visual Studio. Estoy usando 2005, si eso importa.

¿Existe alguna herramienta que nos permita recrear un pdb dado el código fuente, todos los archivos .obj y el .exe original? ¿O hay una configuración cuando compilamos/vinculamos para decir "hacer exactamente como este otro exe que acabas de hacer" o algo así?

Actualización rápida, basada en las respuestas hasta ahora: Tengo el archivo exe que le enviamos al cliente, pero no el archivo pdb que le corresponde, si eso ayuda. Preferiría no enviarles una compilación nueva (si es posible), porque lleva aproximadamente una semana de ejecución para obtener los volcados de emergencia, y el cliente ya está en el "¿por qué no está esto ya arreglado?" escenario. (Si enviamos otra compilación, preferiría que sea una que resuelva el problema o que tenga una depuración adicional en el área de interés, no solo el mismo código.) Sé que es posible hacer algo de esto manualmente con un muchas conjeturas; eso es lo que estamos haciendo actualmente. Pero es un dolor, así que espero que haya una forma de automatizarlo.

+0

Vea también http://stackoverflow.com/questions/744870/how-can-you-change-an-age-mismatched-pdb-to-match-properly y http://stackoverflow.com/questions/134866/windbg-dr-watson-minidump-requires-pdb-dll-originalmente-built-for-installed-vers – wimh

+0

Hazle lavar los platos para el próximo mes. Mientras tanto, envíeles otra 'revisión'. –

+0

Los enlaces de Wimmel funcionaron para mí. Esa es una gran herramienta. Si haces una respuesta a tu comentario, lo aceptaré. – Michael

Respuesta

0

Cuando tiene las fuentes, es bastante fácil encontrar la correspondencia entre ellas y el archivo exe. Solo solicíteles que le envíen el archivo exe junto con el registro de bloqueo y el uso de IDA.

Lo que está pidiendo es mucho más difícil que eso, considerando también que lo necesita para "un solo uso".

0

No puede volver a crear un PDB para que coincida con un ejecutable preexistente. El PDB contiene una "huella dactilar" que es única para cada compilación. A menos que puedas hacer que el viejo PDB reaparezca mágicamente, debes golpear a tu cow-orker en la parte posterior de la cabeza (estilo Gibbs, si miras NCIS), recompilar todo, guardar el PDB en un lugar seguro y enviar un nuevo ejecutable a su cliente, y deje que los cuelgues.

+0

O.o ... eso está bastante desordenado. Parece que Windows es un mundo difícil para regenerar artefactos idénticos, ¿eh? –

+0

No tiene nada que ver con Windows per se. Es una cosa de Visual Studio. Supongo que * puedes * hacer alguna depuración post mortem sin el PDB (si tienes el mapa del enlazador, etc.), pero es terriblemente difícil. Requiere mucha habilidad vudú. :) –

+0

Interesante. Supongo que esa es una razón más para usar un sistema tipo UNIX si es posible. En mi humilde opinión, tiene que ser posible regenerar artefactos binarios de forma precisa (es decir, las compilaciones deben ser perfectamente repetibles) o se vuelve demasiado difícil para depurar problemas de forma confiable ... –

1

Si su sistema de compilación le permite recrear cualquier archivo binario de cualquier revisión que tenga en su historial, entonces debería poder obtener la ID de compilación del cliente y regenerar esa misma ID de compilación exacta, junto con todos los archivos binarios Etcétera. Eso llevará un tiempo si tienes un proyecto grande, por supuesto, pero también dará el archivo de depuración que necesitas.

Si no tiene forma de realizar una reproducción exacta de una construcción, mire esta situación, piense detenidamente sobre otras que puedan surgir y comience a mover para que sea posible regenerar todas las construcciones exitosas y los archivos asociados en la historia del proyecto. Esto hará que mucho sea más fácil de trabajar problemas como este en el futuro.

Cuestiones relacionadas