Autor Wątek: [VS10] Release w trybie debug vs Release i odpalenie exeka  (Przeczytany 3611 razy)

Offline Kuza

  • Użytkownik

# Grudzień 02, 2011, 18:12:10
Witam wszystkich,

Problem polega na dziwnym zachowaniu aplikacji w trybie release po odpaleniu exe'ka. Renderuje się tylko jeden obiekt - dynamiczne niebo. Myślałem, że przyczyną będą obiekty które mają przypisany shader z teksturą, ale jednak nie. Najprostszy z możliwych shaderów z jednolitym kolorem podpiętym pod obiekty również nie daje efektów. Dziwne jest to, że w trybie release z poziomu Visuala(F5) wszystko działa, zarówno jak po wypuszczeniu aplikacji w trybie debug i odpaleniu exeka. Assetsy ładowane są poprawnie (więc nie jest to wina working directory itp.), logger milczy, więc nie rozumiem całej sytuacji. Zawsze myślałem że F5 dla visuala to po prostu podpięcie uruchomionego exeka do celów debuga.

Żeby było śmieszniej, drugi taki sam wrzucony model nieba na scenę wyświetla się w releasie(F5) i oczywiście nie widać go w exe.... O ile to coś pomoże: niebo jest tworzone niemalże na końcu.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 02, 2011, 18:13:45
Nie bluźnisz wskaźnikami albo niezainicjalizowanymi zmiennymi gdzieś w w kodzie?

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Grudzień 02, 2011, 18:20:36
Uruchamiając z poziomu Visuala EXEka (F5/Ctrl+F5), working directory przestawia się na $(SOLUTIONDIR)/$(PROJECTNAME) (katalog solucja/projekt). Uruchamiając EXE ręcznie, working directory ustawione jest w bieżącym katalogu. Przekopiuj EXEka do folderu z plikiem projektu (.vcxproj) i spróbuj tam uruchomić - jeśli zadziała, to problemem jednak jest working directory.

Offline Kuza

  • Użytkownik

# Grudzień 02, 2011, 18:35:20
Cytuj
Uruchamiając z poziomu Visuala EXEka (F5/Ctrl+F5), working directory przestawia się na $(SOLUTIONDIR)/$(PROJECTNAME) (katalog solucja/projekt). Uruchamiając EXE ręcznie, working directory ustawione jest w bieżącym katalogu. Przekopiuj EXEka do folderu z plikiem projektu (.vcxproj) i spróbuj tam uruchomić - jeśli zadziała, to problemem jednak jest working directory.

To samo. Zresztą tak jak mówię, tekstury, shadery, modele ładowane są poprawnie (w przeciwnym wypadku widziałbym ciemność).

Cytuj
Nie bluźnisz wskaźnikami albo niezainicjalizowanymi zmiennymi gdzieś w w kodzie?

Hmm, czy w takich sytuacjach już w trybie release visual nie powinien zaprotestować? Zakładając, że to wina wskaźników i gdzieś niezainicjalizowane zmienne istnieją... Jak dla kodu który ma 20000 linii mam szukać winnych przy tego typu błędach :D? CppCheck na podstawie kodu nie wywala żadnych errorów/warningów o wskaźnikach i zmiennych, ale mam do niego raczej ograniczone zaufanie... Obiekty trzymane są w wektorze shared_ptr'ów i wiem że wszystko żyje, bo jak biorę exek'a i 'attach to project', to w kodzie wszytko wygląda ok (np. konsola wypisuje dobre nazwy obiektów jakie im nadaje w trakcie ich tworzenia).
« Ostatnia zmiana: Grudzień 02, 2011, 18:41:57 wysłana przez Kuza »

Offline Adam7

  • Użytkownik
    • warsztat.gd

# Grudzień 02, 2011, 18:54:02
Jak dla kodu który ma 20000 linii mam szukać winnych przy tego typu błędach :D?

I przez ten cały czas nie testowałeś kodu, że nie zauważyłeś problemu?

Offline Kuza

  • Użytkownik

# Grudzień 02, 2011, 19:00:02
I przez ten cały czas nie testowałeś kodu, że nie zauważyłeś problemu?

No chyba po to jest właśnie tryb debug?

Debugging - Podstawowym zadaniem debuggera jest sprawowanie kontroli nad wykonaniem kodu, co umożliwia zlokalizowanie instrukcji odpowiedzialnych za wadliwe działanie programu.

No chyba że Microsoft zna inną definicję debugowania i tak naprawdę błędy w programach wychodzą dopiero w releasie...

Offline yarpen

  • Użytkownik

# Grudzień 02, 2011, 19:04:38
Wylaczaj optymalizacje plik po pliku.

Offline Kuba D.

  • Użytkownik

# Grudzień 02, 2011, 19:12:59
Jak dla kodu który ma 20000 linii mam szukać winnych przy tego typu błędach :D?
To zmien warning level na /W4 lub wrecz na /Wall to roznego rodzaju ciekawostki znajdziesz ( niezainicjowane zmienne pewnie tez).

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Grudzień 02, 2011, 19:22:33
Polecam analizę statyczną kodu. Jest w sieci trochę narzędzi. Potrafią pokazać masę potencjalnych problemów w kodzie i robią to jak kompilator - run i ściana komunikatów.

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 02, 2011, 20:08:15
Analiza dynamiczna też robi swoje :) Jak napisałeś w miarę przenośnie, to skompiluj na linuksie i odpal pod valgrindem - znajdzie Ci dwa razy więcej bugów, niż zrobiłeś :-)

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Grudzień 02, 2011, 20:28:02
Odpal program pod PIXem i sprawdź, co się renderuje, a co nie (ew. renderuje źle). Może z tego coś wywnioskujesz.

Offline Kuza

  • Użytkownik

# Grudzień 02, 2011, 20:35:36
Cytuj
Wylaczaj optymalizacje plik po pliku.

Można wiedzieć jak?

Cytuj
To zmien warning level na /W4 lub wrecz na /Wall to roznego rodzaju ciekawostki znajdziesz ( niezainicjowane zmienne pewnie tez).

Wynik przy Wall: Errors: 0; Warnings: 23139; Messages: 0; . Da się jakoś zrobić tak, aby pomijał warningi z kodu pochodzącego z zew. bibliotek?

Cytuj
Odpal program pod PIXem i sprawdź, co się renderuje, a co nie (ew. renderuje źle). Może z tego coś wywnioskujesz.

Sry, zapomniałem wspomnieć, korzystam z ogl'a.

Jeśli nic nie pomoże, to na ruszt leci valgrind. Dalej nie ma narzędzia na windzie które może mu dorównać?


Dzięki wszystkim za rady ;]
« Ostatnia zmiana: Grudzień 02, 2011, 20:38:28 wysłana przez Kuza »

Offline yarpen

  • Użytkownik

# Grudzień 02, 2011, 20:42:29
Można wiedzieć jak?
#pragma optimize( "", off )
Na poczatku pliku

#pragma optimize( "", on )  na koncu.

Offline Kuba D.

  • Użytkownik

# Grudzień 02, 2011, 21:17:12
W Visualu mozesz albo korzystac z #pragma albo wejsc w Properties konkretnego pliku i bezposrednio ustawic co trzeba, tutaj jest pare slow na ten temat.

Offline Kuza

  • Użytkownik

# Grudzień 03, 2011, 02:44:39
Większość warningów pousuwana, trochę syfu wywalono i tak o to program w trybie release działa. Jeszcze raz dzięki za pomoc ;].