visual tutorial studio para mejores las instalar extensiones español configurar compilar code visual-studio visual-studio-2008 debug-build

visual studio - tutorial - Ejecución de compilaciones de depuración vc2008 en máquinas no dev



visual studio code español (3)

Lea esta publicación de blog sobre los archivos que necesita para poder ejecutar el aspecto de depuración de su aplicación y dónde obtenerlos. Sin embargo, no puede redistribuirlos oficialmente a terceros.

Si tiene un instalador para su aplicación, también hay un módulo de fusión que puede compilar para desplegar el tiempo de ejecución de depuración en máquinas sin Visual Studio. Esto es solo para fines de prueba, por supuesto. Los módulos de fusión se encuentran en C:/Program Files/Common Files/Merge Modules .

Estoy construyendo mi aplicación en vc2008 y probándola en una red de máquinas.

¿Hay alguna manera, aparte de instalar Visual Studio 2008, de ejecutar una compilación de depuración de un programa C ++ en otra máquina? (es decir, que no tiene vc2008 instalado)

Al instalar el paquete de redist solo se instalan las DLL de soporte de modo de lanzamiento para los programas vc2008. Actualmente se queja de que "esta aplicación no se pudo iniciar porque la configuración de la aplicación es incorrecta. La reinstalación de la aplicación puede solucionar este problema", que supongo es el código de "me faltan las DLL".


Por supuesto, siempre puede configurar el programa para vincular estáticamente en el CRT en lugar de usar el DLL.

De esta forma evitará las molestias (tanto en términos de configuración como en términos de ausencia de licencia de redistribución) de tener que asegurarse de que los archivos DLL de depuración estén instalados correctamente.

Simplemente cambie la configuración de Generación de código para "Biblioteca de tiempo de ejecución" a "Depuración multiproceso (/ MTd)" o use la opción "/ MTd" en la línea de comando.


No se puede, porque no hay una redistribución del instalador para el tiempo de ejecución de depuración (y, de hecho, la licencia del software prohíbe su distribución, por lo que estaría rompiendo el CLUF, incluso si obtuviera algo en conjunto). Sin embargo, una "compilación de depuración" generalmente implica 4 opciones separadas, y las otras 3 no afectan la distribución de la aplicación.

  1. Generando un archivo .pdb (cl / Zi y link / DEBUG), que permite la depuración simbólica. Probablemente quiera agregar / OPT: ref a las opciones del enlazador; el vinculador elimina funciones sin referencia cuando no está haciendo un archivo .pdb, pero con el modo / DEBUG las mantiene todas (ya que los símbolos de depuración las referencian) a menos que lo agregue explícitamente.

    Generalmente hago esto con todas mis compilaciones, incluso las de producción. Siempre que vuelvas a activar las optimizaciones del enlazador con / OPT: ref, en realidad no cuesta nada, y tener los símbolos puede ser útil si terminas queriendo leer un volcado.

  2. Utilizar una versión de depuración de la biblioteca de tiempo de ejecución de C (probablemente MSVCR * D.dll, pero depende del tiempo de ejecución que esté usando). Esto se reduce a / MT o / MTd (o algo más si no se usa el tiempo de ejecución dll).

    Este es el que significa que ya no puedes redistribuir las cosas. También tiene un gran impacto en el desempeño de algunas funciones de libraty, particularmente la asignación de memoria. Las versiones de depuración de tiempo de ejecución tienen cuidado de "envenenar" la memoria que tocan con los valores para que los errores de datos no inicializados sean claros, los de lanzamiento generalmente abandonan la ronda de datos antiguos para ahorrar tiempo tocando. Creo que con las implementaciones MSVCP * STL las verificaciones de depuración también omiten toda la agrupación de asignaciones que generalmente se realiza, de modo que un comprobador de fugas puede mostrar exactamente el bloque que se podría pensar y no un trozo de memoria mayor que se ha subasignado, pero eso significa que hace que más llamadas a malloc sean mucho más lentas. Si tiene errores de manejo de puntero o iterador, esto podría afectar el tipo de mal comportamiento que obtiene.

  3. Desactivando las optimizaciones del compilador (/ Od).

    Este hace muchas cosas ( esta pregunta tiene una buena discusión sobre el tema), pero básicamente duele el rendimiento. Mucho. Desafortunadamente, es necesario si quieres que un solo paso funcione sin problemas.

  4. configurando el preprocesador # define DEBUG o NDEBUG.

    Esto afecta a muchas bibliotecas de varias maneras, pero lo más notable es que compila o elimina assert () y amigos.

Entonces, podría considerar hacer una compilación con una combinación menor de estas selecciones. Aprovecho mucho las compilaciones que usan símbolos (/ Zi y link / DEBUG) y afirma (/ DDEBUG), pero aún están optimizadas (/ O1 o / O2 o lo que sea que uses) pero con punteros de stack stack guardados para borrar trazas inversas (/ Oy-) y utilizar la biblioteca de tiempo de ejecución normal (/ MT). Esto se realiza cerca de mi compilación de lanzamiento y es semi-depurable (las trazas inversas son buenas, el paso simple es un poco raro en el nivel de la fuente, el nivel de ensamblaje funciona bien por supuesto). Puede tener todas las configuraciones que desee; simplemente clone su versión uno y active las partes de la depuración que parezcan útiles.

El único que debería afectar la redistribución de la aplicación es 2.

Si intenta depurar en otra máquina, también podría estar interesado en msvsmon .