2011-09-22 10 views
7

Silnik gry, z którym pracuję, jest zbyt wolny w kompilacji debugowania i nie można go debugować. Jedną z rzeczy, które chciałbym, jest aby kompilator wbudował małe funkcje (szczególnie w klasie Vector/Matrix i container). To może, ale nie musi, przyspieszyć grę w kompilacji debugowania. Przed poważnym profilowaniem i próbą wykrycia wąskich gardeł pomyślałem, że spróbuję tego najpierw, ponieważ będę musiał wykonać minimalną pracę, a wyniki mogą być obiecujące.Funkcje wbudowane w kompilację debugowania (Visual C++ 2008)

Czy istnieje sposób na uzyskanie kompilatora Visual C++ do wstawiania funkcji w kompilacjach debugowania?

Odpowiedz

5

Opcje projektu -> C/C++ -> Optymalizacja -> Rozszerzenie funkcji inline. Włącz to do /Ob2. Zrób to w konfiguracji debugowania.

W wersji Release, rozszerzenie funkcji jest implikowane przez inne ustawienia optymalizacji, więc nawet jeśli domyślnie wszystkie konfiguracje mówią "Domyślne" dla ustawienia, zachowanie jest rzeczywiście inne.

Wierzę, że kompilacje debugowania powinny mieć wbudowane zachowanie ekspansji takie samo jak wydanie; naprawdę nie ma powodu, aby tego nie robić.

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

+0

Dzięki za odpowiedź, sprawdzę to, gdy tylko znajdę czas, a następnie sprawdzę i zaznaczę odpowiedź. – Samaursa

+0

Sprawdziłem to jako poprawne, ponieważ w plikach pomocy VS nie ma wskazań, że to nie zadziała dla kompilacji debugowania (nie ma też ostrzeżeń kompilatora nieobsługiwanej flagi kompilatora). Jestem w stanie przełamać najprostsze funkcje jednej linii, ale nie jestem w stanie tego zrobić w wersji. Nie jestem pewien, czy jest on widoczny, chyba że spojrzę na zgromadzenie. – Samaursa

+0

Czy to spowoduje, że debugger stanie się "zdezorientowany"? – paulm

-1

DEBUG jest zdefiniowany przez Visual Studio, gdy projekt jest skompilowany w trybie debugowania tak:

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

Problem polega na tym, że słowo kluczowe 'inline' jest całkowicie ignorowane przez kompilator podczas debugowania. – Samaursa

0

Można spróbować __forceinline. Koniecznie przeczytaj informacje na temat kompilacji debugowania na tej stronie (wyłącz opcję /Ob0).

Podejrzewam, że to nie zmieni bardzo wydajności. Inną rzeczą do wypróbowania, jeśli jeszcze tego nie zrobiłeś, jest dodanie symboli do kompilacji wydania. Działa całkiem dobrze do debugowania wielu problemów.

0

pan myli dwie opcje kompilatora. /O wpływa na optymalizację, w tym na wprowadzanie znaków. /ZI tworzy plik PDB do debugowania. Można je ustawić niezależnie.

Może być przydatne sklonowanie konfiguracji "Debugowanie" i utworzenie konfiguracji zoptymalizowanej pod kątem debugowania z /O1 i /ZI.

+0

Mogą one być, tak, ale przy optymalizacji, zbyt wiele rzeczy jest zoptymalizowanych. Na przykład łańcuchy nie mogą być poprawnie debugowane przez większość czasu dzięki optymalizacji i informacjom debugowania. Debugger nie pokazuje wartości dla wielu zmiennych lokalnych z optymalizacją, nawet jeśli istnieją informacje debugowania. – Samaursa

Powiązane problemy