2011-09-22 9 views
7

El motor de juego con el que estoy trabajando es demasiado lento en la compilación de depuración y es imposible depurar el juego. Una de las cosas que me gustaría es que el compilador incorpore pequeñas funciones (especialmente en Vector/Matrix y clases de contenedor). Esto puede o no acelerar el juego en la construcción de depuración. Antes de hacer un perfil exhaustivo y tratar de resolver los cuellos de botella, pensé que probaría esto primero, ya que tendría que hacer un trabajo mínimo y los resultados pueden ser prometedores.Funciones en línea en la creación de depuración (Visual C++ 2008)

Entonces, ¿hay alguna manera de hacer que el compilador de Visual C++ incorpore las funciones en las compilaciones de depuración?

Respuesta

5

Opciones de proyecto -> C/C++ -> Optimización -> Expansión de la función en línea. Gire esto a /Ob2. Haz esto en tu configuración de depuración.

En Release, la expansión de la función en línea está implícita en otras configuraciones de optimización, por lo que aunque por defecto todas las configuraciones digan "Predeterminado" para la configuración, el comportamiento es realmente diferente.

Creo que las compilaciones Debug deben tener un comportamiento de expansión en línea igual que la versión; realmente no hay razón para no hacerlo.

http://msdn.microsoft.com/en-us/library/47238hez.aspx

+0

Gracias por la respuesta, comprobaré esto tan pronto como encuentre la hora y luego marcaré la respuesta. – Samaursa

+0

Lo comprobé como correcto, ya que no hay ninguna indicación en los archivos de ayuda VS de que esto no funcione para las compilaciones de depuración (tampoco advertencias del compilador del indicador del compilador no compatible). Puedo irrumpir en las funciones más simples de una línea, pero no puedo hacerlo en el lanzamiento. No estoy seguro de si está en línea a menos que mire el ensamblaje. – Samaursa

+0

¿Esto causará que el depurador se "confunda"? – paulm

-1

DEBUG se define por Visual Studio cuando un proyecto se compila en modo de depuración así:

#ifdef DEBUG 
    inline void fn() { 
#else 
    void fn() { 
#endif 
+0

El problema es que la palabra clave 'inline' es ignorada por completo por el compilador cuando en la depuración – Samaursa

0

Usted puede tratar de __forceinline. Asegúrese de leer sobre compilaciones de depuración en esa página (desactive la opción /Ob0).

Mi sospecha es que esto no cambiará mucho el rendimiento. Otra cosa que debes probar si no lo has hecho es solo agregar símbolos a una versión de lanzamiento. Funciona bastante bien para la depuración de una gran cantidad de problemas.

0

Estás confundiendo dos opciones del compilador. /O influye en la optimización, incluido en línea. /ZI crea el archivo PDB para la depuración. Se pueden establecer de forma independiente.

Sin embargo, puede ser útil clonar la configuración "Debug" y crear una configuración "Debug-optimized" con /O1 y /ZI.

+0

Pueden ser, sí, pero con las optimizaciones activadas, muchas cosas están optimizadas. Por ejemplo, las cadenas no se pueden depurar correctamente la mayor parte del tiempo con optimizaciones y con información de depuración. El depurador no puede mostrar valores para muchas variables locales con optimizaciones, incluso si hay información de depuración. – Samaursa

Cuestiones relacionadas