El tamaño del ejecutable debe aumentar mucho menos del 25%.
Estoy realmente un poco sorprendido de que aumente mucho, pero algunas pruebas rápidas muestran que al menos un gran proyecto de ejemplo (ScummVM) aumenta el .exe de 10,205,184 bytes a 10,996,224 bytes simplemente agregando la opción /DEBUG
a el paso del enlace (aproximadamente un aumento del 8%). /DEBUG
se especifica utilizando la opción "Linker | Debugging | Generate Debug Info"
en el IDE. Tenga en cuenta que esta configuración debería no tiene ningún efecto en las optimizaciones generadas por el compilador.
Sé que se coloca un puntero al archivo .pdb en el ejecutable, pero no hay mucho de eso. Experimenté un poco y descubrí que habilitar la opción del enlazador /OPT:NOREF
cambió la diferencia de tamaño a 10,205,184 frente a 10,205,696. Así que la construcción que no es /DEBUG
se mantuvo del mismo tamaño, pero la construcción /DEBUG
se redujo a solo 512 bytes más (lo que podría explicarse por el puntero a .pdb; tal vez el enlazador redondee a un múltiplo de 512 o algo así). Mucho menos del 1% de aumento. Aparentemente, agregar /DEBUG
hace que el enlazador mantenga objetos sin referencia a menos que también especifique /OPT:NOREF
. (Opción "Linker | Optimization | References"
en el IDE).
El programa funcionará bien sin el archivo .pdb; puede optar por enviarlo a los clientes si desea proporcionar una mejor experiencia de depuración en el sitio del cliente. Si solo desea obtener rastros de pila decentes, no necesita tener el archivo .pdb en la máquina del cliente; ellos (o alguna herramienta/funcionalidad que proporcione) pueden enviar un archivo de volcado que se puede cargar en un archivo. depurar en su sitio con el archivo .pdb disponible y obtener la misma información de rastreo de pila port-mortem.
Por supuesto, una cosa es tener que archivar los archivos .pdb junto con sus lanzamientos. El paquete "Herramientas de depuración para Windows" (que ahora se distribuye en el SDK de Windows) proporciona una herramienta de servidor de símbolos para que pueda archivar .pdbs y recuperarlos fácilmente para la depuración.
El único inconveniente que se me ocurre al distribuir archivos .pdb es que puede facilitar la ingeniería inversa de su aplicación, si eso le preocupa.Tenga en cuenta que Microsoft distribuye símbolos para Windows (utilizando un servidor de símbolos público, así como paquetes de los conjuntos de símbolos completos para algunas versiones específicas). Sin embargo, los símbolos que distribuyen se pasan por un paso de desinfección que elimina ciertos elementos que consideran sensibles. Puede hacer lo mismo (o similar) utilizando la opción /PDBSTRIPPED
del vinculador ("Linker | Debugging | Strip Private Symbols"
en el IDE). Consulte the MSDN docs para obtener detalles sobre lo que elimina la opción. Si va a distribuir símbolos, probablemente sea apropiado usar esa opción.
Aparentemente, SCUMVM tiene muy poco código sin referencia :) Después de habilitar la extracción de símbolos sin referencia el tamaño del ejecutable volvió a la normalidad. ¡Muchas gracias! –
Gracias por señalar la referencia del enlazador – Gob00st