Pregunta

Tengo un código en Visual Studio 2008 en C ++ que funciona con archivos simplemente por fopen y fclose. Todo funciona perfecto en modo de depuración. y he probado con varios conjuntos de datos. Pero no funciona en modo de lanzamiento. Se estrella todo el tiempo. He apagado todas las optimizaciones, también no hay dependencia a nada (en el enlazador), y también me he fijado los siguientes:

Optimización: Desactivado (/ Od) Mantener sin referencia de datos. No retire redundante Optimizar para Windows 98: NO

Todavía sigo preguntando cómo no debería trabajar bajo estas circunstancias. ¿Qué más debo desactivar para permitir que funcione como en el modo de depuración?

Creo que si funciona en modo de lanzamiento, pero no en el modo de depuración, que podría ser un fallo de codificación, pero a la inversa se ve raro. ¿no es así?

Agradezco cualquier ayuda. --Nima

¿Fue útil?

Solución

modos de depuración menudo inicializar las asignaciones de datos montón. El programa podría depender de este comportamiento. Buscar las variables y los búferes que no se están inicializados.

Otros consejos

1) Asegúrate de cualquiera y todo el código que depende de macros del preprocesador.
2) Uso assert () para verificar las condiciones previas del estado del programa. Estos no deben esperarse que el flujo del programa de impacto (es decir. La eliminación de la verificación sería todavía permitir que el código para proporcionar el mismo resultado final) porque aserción es una macro. Utilizar los condicionales regulares de tiempo de ejecución cuando una aserción no es suficiente.
3) De hecho, nunca deje una variable en un estado no inicializado.

Con mucho, la explicación más probable es que difieren comportamiento indefinido en los dos modos causados ??por la memoria sin inicializar. La falta de seguridad de los subprocesos y problemas con el código de sincronización también se presentan este tipo de comportamiento debido a las diferentes entornos temporales entre depuración y liberación, pero si su programa no es multi-hilo entonces, evidentemente, esto no puede ser la misma.

Me había experimentado esto y en mi caso fue a causa de una de mi serie de estructura, que supone que tienen solamente X índice, pero mi bucle que verifican esta estructura había terminado la comprobación para X index + 1. Interesante es el modo de depuración se funcionando muy bien aunque yo estaba en Visual C ++ 2005.

Me pasé un par de horas, poniendo en printf en mi codificación de línea a línea para capturar el insecto. Cualquier persona tiene buena manera de depurar este tipo de error, por favor hágamelo saber.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top