visual studio crear c++ visual-c++ linker

c++ - studio - ¿Para qué sirven los archivos.map que produce el enlazador?



crear dll en visual studio 2017 (5)

¿Cuál es el uso de los archivos .map que produce el enlazador VC ++ cuando se utiliza el parámetro / MAP o la configuración del proyecto "Generar archivo de mapa"? ¿Cuándo los necesito y cómo me beneficio de ellos?


Los mapas de vinculador pueden ser muy útiles en proyectos grandes cuando necesita rastrear dependencias entre las unidades de compilación y las bibliotecas. Típicamente, un enlazador informará un símbolo que causó problemas, y la mayoría de las veces, una simple búsqueda de este nombre de símbolo no arrojará ningún resultado (o devolverá toneladas de falsos positivos para símbolos como read ).

Sin un mapa enlazador, la única opción que tiene es analizar todos los archivos fuente disponibles (después del paso de preprocesamiento si se usaron macros, que normalmente es el caso) y esperar que encuentre el lugar relevante.

Los mapas del enlazador generalmente tienen una sección llamada "referencia por archivo / símbolo" que le dice qué archivo objeto fue requerido por otro archivo objeto de su proyecto, y qué símbolo fue referenciado exactamente.

Una vez estaba trabajando en un proyecto que tenía que ser portado en un sistema sin soporte de localización. El vinculador informaba de errores de "referencia no definida a _localeconv_r ", lo que habría sido _localeconv_r de localizar buscando en las fuentes. Afortunadamente, un archivo de mapa del enlazador GCC generado con -Map=output.map reveló todas las funciones problemáticas con una sola búsqueda.


Los necesita con poca frecuencia, pero pueden ser útiles para depurar algunos problemas porque proporcionan información sobre la ubicación de las funciones y los datos.

Por ejemplo:

  • información detallada sobre todos los segmentos (código, datos y otros).
  • enlazar números de línea al código

Puede usar archivos de mapas para herramientas de depuración.


Para los sistemas integrados, los archivos de mapas son mucho más útiles. (Aunque no usaría Visual C ++ para eso;)

Cosas como saber qué tan cerca está de quedarse sin memoria de programas / datos, y en qué ubicación reside una variable en particular, son importantes.


Un buen artículo sobre cómo usar los archivos de mapas para encontrar bloqueos.

http://www.codeproject.com/KB/debug/mapfile.aspx

Hacer manualmente todo esto es muy poco interesante.

No conozco ninguna herramienta que pueda leer archivos de mapas y ayudar a encontrar la ubicación del accidente. Si alguien sabe, por favor actualícenos.


WinDBG usa archivos .map y .pdb para ayudar a depurar fallas cuando se analizan los volcados de volcado .hdmp y .mdmp.

Básicamente, asignan direcciones de memoria a funciones y variables dentro de .exe (o .dll). Muy útil en general.

EDITAR: La forma más útil para eliminar errores "posteriores al hecho" es usar WinDbg para mí (plataforma de Windows). Ábrelo y abre el volcado de emergencia. Luego configure la ruta fuente para que apunte al código (si lo tiene), la ruta del símbolo para apuntar a su .map y .pdb y la ruta de la imagen al .exe, y escriba "! Analyze -v" en la línea de comando . Ahora tiene un seguimiento de pila completo con líneas de código y todo.
Es incluso mejor si tiene el servidor de símbolos MS en la ruta y si el montón de la página completa se activó o se estaba ejecutando adplus. Vea estos dos recursos favoritos de WinDbg:
Primera parada :: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
Forzar cargar los símbolos :: http://www.osronline.com/ShowThread.cfm?link=182377
Sitio útil :: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/