2012-02-10 8 views
5

estoy usando (C++) Visual Studio 2010.punto de quiebre en el modo de disparo

tengo que rastrear el flujo de control de mi appication.So que he puesto un punto de interrupción en el código fuente

mientras ejecutar la aplicación en modo de depuración, el punto de quiebre golpea. Pero en el modo de lanzamiento, no golpeó.

¿Por favor sugiera una solución para calentar el punto de ruptura en el modo de lanzamiento ???

+0

De ninguna manera. Esa es (una de las razones) para qué es el modo de depuración. ¿Por qué quieres llegar al punto de interrupción en el modo de lanzamiento? –

+1

El modo "Liberar" habilita optimizaciones que pueden (y con frecuencia lo hacen) interrumpir el flujo de su código. Es muy difícil ver un problema con las optimizaciones habilitadas, es por eso que no están habilitadas en el modo "Depurar". Los programadores generalmente usan eso para hacer su depuración. ¿No ves el problema que intentas resolver en el modo de depuración? –

+1

¿Y el lenguaje de programación es? –

Respuesta

7

En el modo de lanzamiento, su código está optimizado y eso puede cambiar el flujo de su programa. Por ejemplo, si una función es simple y solo se llama una vez, el compilador puede alinear la función en modo de lanzamiento.

El modo de depuración no tiene este tipo de optimización y está diseñado para depurar su código.

0

Los puntos de interrupción del modo de liberación son útiles para trabajar. La forma más sencilla de hacerlo funcionar es hacer una llamada a una función llamada release_mode_breakpoint() en su código. A continuación, defina esa función como esta:

#pragma optimize("", off) 
void release_mode_breakpoint() 
{ 
    int put_breakpoint_here = 1; 
} 
#pragma optimize("", on) 

entonces usted puede poner un punto de interrupción en esa línea de declaración int, y va a ser golpeado, incluso en modo de lanzamiento. A continuación, solo suba la pila en el depurador de nuevo a la función en la que realmente quería un punto de interrupción.

No deje realmente ese código en su versión final de producción, ya que la línea no optimizada puede evitar que el compilador optimice las llamadas codificar correctamente

3

Puede usar __debugbreak() intrinisic. Esto también es muy útil si quiere romper una condición específica. Por ejemplo:

if (var > LIMIT) 
    __debugbreak(); 
+0

no funciona en modo de lanzamiento en VC++ 2013 –

12

Estoy usando VS2015. después de muchas soluciones fallidas encontré una que funcionó para mí. Solo desmarque "Habilitar solo mi código" en Menú-> Depuración-> Opciones-> Depuración-> General. Ver imagen adjunta: enable debug in release mode-VS2015

Realmente espero que esto va a resolver el problema para usted :)

+0

Esto resolvió mi problema. –

Cuestiones relacionadas