Tengo que depurar un proyecto de c++, pero como una dependencia no se compila en modo de depuración y yo no he sido capaz de solucionar ese problema hasta el momento, me gustaría intentar depurar el proyecto en modo de lanzamiento.

Actualmente, la aplicación se bloquea debido a un puntero nulo, pero no tengo el código que está causando el error. Como puntos de quiebre al parecer, son ignorados en modo de lanzamiento, me gustaría saber cuál es la mejor manera de encontrar el error.

InformationsquelleAutor Pedro | 2012-06-28

2 Comentarios

  1. 62

    En VS, haga clic derecho en el proyecto, elige «Propiedades».

    1. Haga clic en la C/C++ nodo. Conjunto de Depuración de la Información de Formato compatible con C7 (/Z7) o Programa de Base de datos (/Zi).

    2. Ampliar Vinculador y haga clic en el nodo General. Permiten la Vinculación Incremental a No (/INCREMENTAL:NO).

    3. Seleccione el nodo Depuración. Establecer Generar Información de Depuración en Sí (/DEPURACIÓN).

    4. Seleccione la Optimización del nodo. Establecer Referencias para Sí (/OPT:REF).

      si /OPT:REF se especifica, /OPT:ICF está activada por defecto.

    Que es arrancado directamente de la documentación de Microsoft:

    Hago esto todo el tiempo y casi nunca de depuración en modo de depuración más. Como usted sabe, muchos de los errores que se producen en una versión de lanzamiento no puede producirse en una versión de depuración (casi seguro que los errores que surgen a partir de la invocación de la UB).

    También, yo trabajo en un proyecto que utiliza una tonelada de procesamiento de la imagen y realiza un montón de compresión/descompresión de imágenes de gran tamaño. El uso de un lento compilación de depuración es simplemente inviable.

    • gracias problema resuelto! No sé mucho acerca de los efectos de todos estos ajustes, por lo que es mejor utilizar sólo para depuración y eliminarlos de nuevo cuando esta cumpliendo una liberación real de la versión?
    • Sí, es probablemente la mejor manera de volver y dejar los valores por defecto para la liberación. Por lo general crear un nuevo tipo de generación para esta configuración, es decir, «la liberación w/símbolos». Dicho esto, no puede hacer daño a ir a estudiar lo que los interruptores de la realidad.
    • Así que (en realidad se trata de una adaptación de la misma a intel visual fortran) hizo que mi día ! (He creado una nueva configuración mediante la copia de la liberación, y de cambiar lo que necesita ser cambiado.) Entiendo por qué hacer F10 no ejecutar el código lineal (supongo que algunos otros de optimización de ocurrir), pero lo que yo no entiendo es por qué algunas de las líneas que pasan a través de varias veces, como declaraciones/inicializaciones etc.
    • Porque esas líneas no existen en la versión de lanzamiento. Han sido optimizadas.
  2. 6

    No siempre se puede simplemente cambiar la configuración del proyecto y volver a compilar.

    A veces usted tiene una versión que desea depurar, o un archivo de volcado enviado por un cliente.

    Al compilar un proyecto de C++ en la versión con optimizaciones, el depurador a veces no se muestran a la derecha de la información del objeto.

    Las variables locales son generalmente los primeros en ir, y muchas veces, la de este objeto se pierde información para el depurador.

    La razón es que el compilador utiliza el hardware disponible de registros para almacenar la información, y utiliza las optimizaciones para evitar la asignación de las variables locales.

    He sugerido una manera de encontrar la información que falta aquí:

    La depuración de Liberación de Proyectos en C++ – Encontrar el Objeto Perdido de la Información

    • s respuesta es grande si usted tiene acceso al código y el IDE. Iojai la respuesta que vale la pena leer.

Dejar respuesta

Please enter your comment!
Please enter your name here