2011-09-22 2 views
7

Il motore di gioco con cui sto lavorando è troppo lento nella compilazione di debug ed è impossibile eseguire il debug del gioco. Una delle cose che vorrei è che il compilatore integri piccole funzioni (specialmente nelle classi Vector/Matrix e container). Questo potrebbe o non velocizzare il gioco nella compilazione di debug. Prima di profilare pesantemente e cercare di capire i colli di bottiglia, ho pensato di provare prima questo, perché avrei dovuto fare un lavoro minimo e i risultati potrebbero essere promettenti.Funzioni inline in build di debug (Visual C++ 2008)

Quindi, c'è un modo per ottenere il compilatore di Visual C++ per le funzioni inline nelle build di debug?

risposta

5

Opzioni di progetto -> C/C++ -> Ottimizzazione -> Espansione funzione in linea. Giralo a /Ob2. Fatelo nella configurazione di Debug.

In Release, l'espansione della funzione inline è implicita da altre impostazioni di ottimizzazione, quindi anche se per impostazione predefinita tutte le configurazioni indicano "Predefinito" per l'impostazione, il comportamento è effettivamente diverso.

Credo che i build di debug dovrebbero avere un comportamento di espansione in linea uguale al rilascio; non c'è davvero nessuna ragione per non farlo.

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

+0

Grazie per la risposta, verificherò non appena trovo l'ora e poi segnerà la risposta. – Samaursa

+0

L'ho verificato come corretto in quanto non vi è alcuna indicazione nei file della guida di VS che questo non funzioni per le build di debug (neanche gli avvisi del compilatore del flag del compilatore non supportato). Sono in grado di entrare nella più semplice funzione di una riga, ma non riesco a farlo in versione. Non sono sicuro se sia inlining a meno che non guardi il montaggio. – Samaursa

+0

Ciò farà sì che il debugger venga "confuso"? – paulm

-1

DEBUG è definito da Visual Studio quando un progetto viene compilato in modalità debug in modo da:

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

Il problema è che la parola chiave 'inline' è completamente ignorata dal compilatore quando si esegue il debug – Samaursa

0

Si potrebbe provare a __forceinline. Assicurati di leggere su build di debug su quella pagina (disattivare l'opzione /Ob0).

Il mio sospetto è che questo non cambierà molto le prestazioni. Un'altra cosa da provare se non lo hai già è solo aggiungere simboli a una build di rilascio. Funziona abbastanza bene per il debug di molti problemi.

0

Stai confondendo due opzioni del compilatore. Ottimizzazione dell'influenza /O, inclusa l'inlining. /ZI crea il file PDB per il debug. Possono essere impostati in modo indipendente.

Potrebbe essere utile clonare la configurazione "Debug", tuttavia, e creare una configurazione "Debug-ottimizzata" con entrambi /O1 e /ZI.

+0

Possono essere, sì, ma con le ottimizzazioni attivate, troppe cose sono ottimizzate. Ad esempio, le stringhe non possono essere debugate correttamente la maggior parte delle volte con ottimizzazioni su e con informazioni di debug. Il debugger non riesce a mostrare i valori per molte variabili locali con le ottimizzazioni anche se ci sono informazioni di debug. – Samaursa