[c++][visual studio 2013] Przycinanie się programu w trybie release
Ostatnio zmodyfikowano 2018-12-25 19:58
pekfos |
» 2018-12-24 23:44:56 To nie jest błąd kompilacji, tylko bug linkera. Użyj nowszej wersji. |
|
Wicon Temat założony przez niniejszego użytkownika |
» 2018-12-24 23:46:50 Używałem też visuala 2017 i jest identycznie. |
|
pekfos |
» 2018-12-24 23:49:48 Jaki dokładnie numer wersji? |
|
Wicon Temat założony przez niniejszego użytkownika |
» 2018-12-24 23:55:18 Wersja 15.7.27703.2047 Data ostatniej aktualizacji 8 sierpnia 2018 |
|
pekfos |
» 2018-12-24 23:59:13 Zaktualizuj do najnowszej. |
|
Wicon Temat założony przez niniejszego użytkownika |
» 2018-12-25 14:47:37 Nadal to samo. EDIT: Szukam miejsca w kodzie, które powoduje ten błąd za pomocą #pragma optimize ("", off) . Na początku dodałem taką linijkę na początku każdego pliku w projekcie, teraz pojedynczo usuwam. Jeden plik znalazłem, zaraz sprawdzę czy inne pliki też powodują taki błąd, potem postaram się znaleźć funkcję lub konkretne miejsce w kodzie, może to da jakąś odpowiedź. |
|
Wicon Temat założony przez niniejszego użytkownika |
» 2018-12-25 17:41:18 Ok, chyba znalazłem. Błąd wywalała jedna funkcja, a raczej pętla którą ta funkcja zawierała. Otóż pętla była bardzo długa, ok 7 tyś. linijek. Gdy większą część pętli oznaczyłem w komentarz kompilacja przebiegła pomyślnie. Im jednak mniejszą część pętli zostawiałem w komentarzu a większą odznaczałem do kompilacji tym generowanie kodu trwało coraz dłużej aż przy pewnej ilości zaczynało wyrzucać ten właśnie błąd (Błąd wyrzucało po ok. minucie generowania kodu). Podzieliłem więc tą pętle na 3 pętle i kompilacja się powiodła, chociaż trwała ok. 30 minut z włączoną optymalizacją dla tylko tego 1 pliku. Podzieliłem tą pętlę jeszcze bardziej, na tak krótkie pętle, aby po zaznaczeniu klamry otwierającej każdą z tych pętli podświetliła się ona oraz klamra zamykająca. Kompilacja nadal trwa jednak długo, już ok. 15 minut. (Nadal się kompiluje) Zastanawiam się jednak, czy nie lepiej po prostu wyłączyć optymalizację dla tej jednej funkcji za pomocą właśnie #pragma optimize ("", off) a za funkcją znów włączyć optymalizację. Funkcja ta aktualizuje to co ma być wyświetlane na ekranie gdy gracz otworzył okno nauki u jakiegoś nauczyciela. Funkcja wykonuje się raz w momencie otwierania okna nauki oraz za każdym razem gdy nauczy się którejś z umiejętności z listy. while( f < Lehre_AllSkill.size() ) { sizeofteaching = Lehre_AllSkill.size(); if( Lehre_AllSkill[ f ].SkillNumber == 1 ) { if( PlayerSkill_Str_1 == true ) { ccc = f; while( ccc < Lehre_AllSkill.size() - 1 ) { Lehre_AllSkill[ ccc ] = Lehre_AllSkill[ ccc + 1 ]; ccc++; }; ccc = 0; Lehre_AllSkill.pop_back(); } else { Lehre_AllSkill[ f ].Visual.setString( L"" ); if( PlayerSTR < 20 || PlayerSWORD < 20 ) { Lehre_AllSkill[ f ].Visual.setString( L"" + Lehre_AllSkill[ f ].Visual.getString() + ", WYMAGANIA: " ); } else { Lehre_AllSkill[ f ].Visual.setString( L"" + Lehre_AllSkill[ f ].Visual.getString() + ")" ); }; if( PlayerSTR < 20 && PlayerSWORD < 20 ) { Lehre_AllSkill[ f ].Visual.setString( Lehre_AllSkill[ f ].Visual.getString() + L"Siła: 20, Miecze: 20)" ); }; if( PlayerSTR < 20 && PlayerSWORD > 19 ) { Lehre_AllSkill[ f ].Visual.setString( Lehre_AllSkill[ f ].Visual.getString() + L"Siła: 20)" ); }; if( PlayerSTR > 19 && PlayerSWORD < 20 ) { Lehre_AllSkill[ f ].Visual.setString( Lehre_AllSkill[ f ].Visual.getString() + L"Miecze: 20)" ); }; Lehre_AllSkill[ f ].Visual.setString( L"Walka mieczem- podstawowy (Koszt PN: 5" + Lehre_AllSkill[ f ].Visual.getString() ); }; }; sizeofteaching_02 = Lehre_AllSkill.size(); if( sizeofteaching_02 == sizeofteaching ) f++; };
|
|
pekfos |
» 2018-12-25 17:50:33 Otóż pętla była bardzo długa, ok 7 tyś. linijek. |
7 tysięcy linii w jednej pętli oznacza bardzo słabo napisany kod, co potwierdza załączona próbka kodu. Ale to nie tłumaczy, czemu kompilacja tyle trwa. Raczej do tych 32GB pamięci nie masz doczepionego procesora sprzed 20 lat. To nie brzmi jak poprawne zachowanie i raczej powinieneś zasięgnąć opinii supportu na developercommunity.visualstudio.com. Kompilacja nadal trwa jednak długo | Kompilacja, czy linkowanie? Skoro sypie się link.exe to raczej to drugie. A jeśli dzieje się to z powodu optymalizacji, możesz spróbować wyłączyć Whole Program Optimization. |
|
1 2 « 3 » 4 |