Pregunta

Tengo un espacio de trabajo para ejecutar un codificador de video H.263 en un bucle 31 veces, es decir,el principal se ejecuta 31 veces para generar 31 flujos de bits codificados diferentes.Este espacio de trabajo de MS Visual Studio 2005 tiene todos los archivos fuente C.Cuando creo una configuración "DEBUG" para el espacio de trabajo y la construyo y ejecuto, funciona bien, es decir.genera los 31 archivos de salida como se esperaba.Pero cuando configuro la configuración del espacio de trabajo en "LIBERAR" mdoe y repito el proceso, el codificador falla en la ejecución de algún caso de prueba.

Ahora para depurar esto se verifica lo siguiente:

  1. Analicé el código para ver si se omitía alguna inicialización variable en cada ejecución del codificador.
  2. Verificó las diversas opciones del espacio de trabajo (solución) en ambos modos (DEBUG y RELEASE).

Hay algunas diferencias obvias, pero convertí las opciones relacionadas con la optimización explícitamente en las mismas en ambos modos.

Pero todavía no pude solucionar el problema y encontrar una solución.¿Algún consejo?

-Ajit.

¿Fue útil?

Solución

Es difícil decir cuál podría ser el problema sin inspeccionar cuidadosamente el código.Sin embargo...

Una de las diferencias entre las compilaciones de depuración y versión es cómo se configura el marco de la pila de llamadas a funciones.Hay ciertas clases de cosas malas que puedes hacer (como llamar a una función con un número incorrecto de argumentos) que no son fatales en una versión de depuración pero fallan terriblemente en una versión de lanzamiento.Quizás podría intentar cambiar las opciones relacionadas con el marco de pila (olvidé cómo se llaman, lo siento) en la versión de lanzamiento a las mismas que en la versión de depuración y ver si eso ayuda.

Otra cosa podría ser habilitar todas las advertencias posibles y solucionarlas todas.

Otros consejos

Podría ser un problema de concurrencia de dos subprocesos.La configuración DEBUG ralentiza la ejecución, por lo que el problema no ocurre.Pero sólo una suposición.

Interesante problema..¿Está seguro de que no tiene ningún código de compilación condicional al acecho que no se esté compilando en el modo de lanzamiento?es decir:

#if (DEBUG)
// Debug Code here
#else
// Release Code here
#endif

Eso es lo único que realmente puedo pensar...Yo nunca experimenté algo como esto.

¿Puedes agregar los símbolos de depuración a la versión de lanzamiento y ejecutarlo en el depurador para ver dónde y por qué falló?

Sí, esos fallos bastardos son los más difíciles de solucionar.Afortunadamente, hay algunos pasos que puedes seguir y que te darán pistas antes de recurrir a mirar manualmente el código y esperar encontrar la aguja.

¿Cuándo falla?¿En cada prueba?¿En una prueba específica?¿Qué hace esa prueba que las demás no hacen?

¿Cuál es el error?Si se trata de una infracción de acceso, ¿existe un patrón en el que sucede?Si las direcciones son bajas, podría significar que hay un puntero no inicializado en alguna parte.

¿El programa falla con la configuración de depuración pero sin el depurador adjunto?Si es así, lo más probable es que se trate de un problema de sincronización de subprocesos, como señaló John Smithers.

¿Has intentado ejecutar el código a través de un analizador como Purify?Es lento pero normalmente vale la pena esperar.

Intente depurar la configuración de lanzamiento de todos modos.Solo volcará ensamblados, pero aún puede darle una indicación de lo que sucede, como si el puntero del código salta en medio de la basura o llega a un punto de interrupción en una biblioteca externa.

¿Estás en una arquitectura Intel?De lo contrario, esté atento a los errores de alineación de la memoria, ya que fallan sin previo aviso en algunas arquitecturas y esos algoritmos de códec tienden a crear esas situaciones con frecuencia ya que están demasiado optimizados.

¿Está seguro de que no hay directivas de precompilación que, por ejemplo, ignoren algún código realmente importante en el modo de lanzamiento pero lo permitan en el modo de depuración?

Además, ¿ha implementado algún registro que pueda indicar el ensamblaje preciso que genera el error?

Examinaría el bloqueo con más detalle: si falla en un caso de prueba, entonces suena bastante fácilmente reproducible, lo que suele ser la mayor parte del desafío.

Otra cosa a considerar:en modo de depuración, las variables se inicializan con 0xCCCCCCCC en lugar de cero.Eso podría tener algunos efectos secundarios desagradables.

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