2010-09-07 12 views
13

Tengo un minidump de Windows (código C) y un archivo ejecutable correspondiente. Por desgracia, no tengo los archivos que coinciden exactamente .pdb, pero tengo archivo .pdbs que contienen exactamente el mismo código construido justo en un momento diferente. En Windbg, puedo usar:¿Es posible cargar símbolos no coincidentes en Visual Studio?

.symopt+0x40 

Para decirle que cargue algo, incluso archivos de símbolos no coincidentes. Esto funciona muy bien en esta instancia particular, y puedo obtener una pila de llamadas adecuada. Solo tengo curiosidad sobre si Visual Studio tiene alguna de esas funciones. Utilizamos prácticamente todas las versiones diferentes de VS aquí, así que no importa en qué versión esté. Gracias.

+0

Esto realmente no responde a tu pregunta, pero te harías un gran favor al estandarizar un conjunto consistente de herramientas de desarrollo. –

+1

Tenemos un conjunto consistente. Es solo que admitimos versiones anteriores de nuestro software y no se consideró que valía la pena arriesgar el puerto de las versiones anteriores del software a las versiones más nuevas de Visual Studio. – Morinar

Respuesta

4

No hay ninguna anulación, pero el cartel para this question encontró una manera de modificar los archivos PDB para hacer que coincidan con el EXE.

Gracias a uno de los comentarios sobre la primera respuesta, que nos registramos un enlace a los archivos PDF del libro "Secretos 2000 indocumentado Windows: a programadores Cookbook". Y el autor entra en gran detalle sobre el formato pdb archivo . Como he dicho antes, que tenía ya cargado el AP en un editor hexadecimal y pasó algunos bits en torno apareciendo de haber tomado la edad/partido de la firma, pero no fue así trabajo. Bueno, después de usar la utilidad del libro secretos W2k a "explotar" el AP en las corrientes incluidos, que descubrí que se esconden otra referencia a la edad en la corriente 3 !!!!!!! Una vez me da la vuelta que uno como así, que coincidía en windbg.

No estoy seguro de si quiere llegar a este problema, pero parece que se puede hacer. Si esto es para soporte de producción, entonces podría valer la pena.

+0

Terminé solucionando este problema, pero quiero aceptar una respuesta ya que no me gusta que mi tasa de respuesta sea inferior al 100% ;-) Esta parece tener la información más útil, así que la acepto. – Morinar

0

Según this post su posible usar los comandos windbg sos, así como en el estudio visual. Pero no estoy seguro si ".symopt" también entra en esta categoría.

18

Trate this utility:

utilidad ChkMatch se puede utilizar para comprobar si un partido de archivo ejecutable y la información de depuración. También se puede usar para forzar la coincidencia entre un archivo de información ejecutable y de depuración, si son compatibles.

Para obtener más información sobre el ajuste de la información de depuración y asuntos relacionados, ver este article.

soportados depuración de información formatos: DBG, PDB 2.0, 7.0 ... PDB

+1

Esta debería ser la respuesta aceptada. –

+1

Esto absolutamente debe ser la respuesta aceptada. – SashaZh

+0

En segundo lugar, esta es la solución. –

3

Visual Studio y Windbg coinciden con los pdbs al comparar las marcas de tiempo en el encabezado del Ejecutable con el almacén de marcas de tiempo en el archivo pdb. Puede ver la marca de tiempo ejecutando dumpin/headers.

No he usado chkmatch, pero modificar el exe o pdb para que coincidan entre sí debería funcionar bien.

Tenga en cuenta que esta técnica puede no ser suficiente para depurar su binario.John Robbins en su libro 'Debugging Windows' (que puedo recomendar) menciona que ha visto diferentes resultados de compilación a partir del árbol fuente idéntico construido en tiempos casi idénticos.

Crea siempre símbolos pdb con tus compilaciones (incluidas las compilaciones de versiones) y archívalas junto con los productos de compilación e incluye el archivo .map para una buena medida.

Cuestiones relacionadas