problēma
Re: problēma
Relīze modē tas ir defaultā ieslēgts - gan /O2 (-O2), gan /LTCG (-flto), gan /Zi (-g).
Tāpēc jau iepriekš brīnījos, ka "Varbūt projekta Debug konfigurācijai ir ieslēgta optimizācija?"
Bet vēlreiz saku - lietojam debugeri, soli pa solim izpildam rindiņas un skatamies kā mainās mainīgie. Ja būs ieslēgta optimizācija, tad tur jau uzreiz redzēs, ka kautkas nav labi ar mainīgo vērtībām.
Tāpēc jau iepriekš brīnījos, ka "Varbūt projekta Debug konfigurācijai ir ieslēgta optimizācija?"
Bet vēlreiz saku - lietojam debugeri, soli pa solim izpildam rindiņas un skatamies kā mainās mainīgie. Ja būs ieslēgta optimizācija, tad tur jau uzreiz redzēs, ka kautkas nav labi ar mainīgo vērtībām.
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
2 varianti, kā debugot:
1) Saliec breakpointus dažādās vietās un skaties, cik tālu kods tiek. Kad programma uzkaras, izmet visus, izņemot pēdējo sasniegto, tālāk ar F10 (step over) ej uz priekšu. Ja uzkaras kādas funkcijas iekšpusē, uz tās funkcijas spied F11 (step into). Ja nejauši ieej funkcijā, kura nav vajadzīga, tam noder Shift+F11 (step out).
2) Palaid programmu un pēc uzkāršanās uzliec pauzi. Call stack'ā apskaties starp pazīstamajiem līmeņiem (tiem, kuri atrodas tavā kodā). Pirmais pazīstamais no augšas parasti būs vainīgs.
P.S. Breakpointu māki uzlikt / zini, kas tas ir?
1) Saliec breakpointus dažādās vietās un skaties, cik tālu kods tiek. Kad programma uzkaras, izmet visus, izņemot pēdējo sasniegto, tālāk ar F10 (step over) ej uz priekšu. Ja uzkaras kādas funkcijas iekšpusē, uz tās funkcijas spied F11 (step into). Ja nejauši ieej funkcijā, kura nav vajadzīga, tam noder Shift+F11 (step out).
2) Palaid programmu un pēc uzkāršanās uzliec pauzi. Call stack'ā apskaties starp pazīstamajiem līmeņiem (tiem, kuri atrodas tavā kodā). Pirmais pazīstamais no augšas parasti būs vainīgs.
P.S. Breakpointu māki uzlikt / zini, kas tas ir?
Re: problēma
Pārbaudi debug konfigurācijas projekta settingus - it īpaši vai optimizācija ir atslēgta.
Kad to izdarīsi, tad uzliec breakpointu main savas Load metodes sākumā, un ar F10/F11 izej cauri funkcijai pārbaudot lokālo mainīgo vērtības pēc katra soļa - vai tās satur to, ko tu esi iedomājies.
http://www.learncpp.com/cpp-tutorial/a4 ... eakpoints/
http://www.learncpp.com/cpp-tutorial/a5 ... all-stack/
Te vēl C#'am, bet principi tādi paši kā C++'am: http://www.codeproject.com/Articles/795 ... 0-A-Beginn
Kad to izdarīsi, tad uzliec breakpointu main savas Load metodes sākumā, un ar F10/F11 izej cauri funkcijai pārbaudot lokālo mainīgo vērtības pēc katra soļa - vai tās satur to, ko tu esi iedomājies.
http://www.learncpp.com/cpp-tutorial/a4 ... eakpoints/
http://www.learncpp.com/cpp-tutorial/a5 ... all-stack/
Te vēl C#'am, bet principi tādi paši kā C++'am: http://www.codeproject.com/Articles/795 ... 0-A-Beginn
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Zinu, bet tagad salīdzināšu savu kodu ar http://lazyfoo.net/SDL_tutorials/lesson29/index.php , meklēšu atšķirības.snake5 wrote: P.S. Breakpointu māki uzlikt / zini, kas tas ir?
Pat tāda programma nokrašo bez nekādu ar draw saistītu funkc. izsaukšanu.
Code: Select all
#pragma comment (lib, "SDL.lib")
#pragma comment (lib, "SDLmain.lib")
#include <fstream>
#include <SDL.h>
int main (int argc, char* args[])
{
std::ifstream map( "map.map" );
if( map == NULL || map.is_open() == false)
{
return false;
}
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface* screen;
screen = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
return 1;
};
Gooby pls
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Tikko pamuļķojos un atklāju:
Ja std::ifstream file(""); ir ierakstīts main funkcijā, tad nenokarās; ja tajā pašā failā ir deklarēta atsevišķa funkcija loadLevel(const char* name) {std::ifstream file(""); } , tad arī nenokaras; ja tajā failā ir deklarēta class Level{ public: void Load(const char* name);}; , un deklarēta funkcija Level::loadLevel(..), tad arī nenokarās, ja tā klase un funkcija tiek pārnesta atsevišķā failā, tad arī nenokaras, bet tiklīdz Level.h failā ir klase, bet Level.cpp failā ir funkcijas deklarācija, tad jau nokaras. wtf
Edit: Ja clases un funkcijas deklarāciju atstāj Level.h failā, bet izveido jaunu un pavisam tukšu Level.cpp failu, tad arī nokrašo.
Ja std::ifstream file(""); ir ierakstīts main funkcijā, tad nenokarās; ja tajā pašā failā ir deklarēta atsevišķa funkcija loadLevel(const char* name) {std::ifstream file(""); } , tad arī nenokaras; ja tajā failā ir deklarēta class Level{ public: void Load(const char* name);}; , un deklarēta funkcija Level::loadLevel(..), tad arī nenokarās, ja tā klase un funkcija tiek pārnesta atsevišķā failā, tad arī nenokaras, bet tiklīdz Level.h failā ir klase, bet Level.cpp failā ir funkcijas deklarācija, tad jau nokaras. wtf
Edit: Ja clases un funkcijas deklarāciju atstāj Level.h failā, bet izveido jaunu un pavisam tukšu Level.cpp failu, tad arī nokrašo.
Gooby pls
Re: problēma
Code: Select all
std::ifstream map( "map.map" );
if( map == NULL || map.is_open() == false)
{
return false;
}
Code: Select all
std::ifstream map( "map.map" );
if (!map)
{
return false;
}
100 un 1 reizi prasu - ko tev saka debugeris? Kas precīzi krašo, un kurā rindā un kā? Paspaidi taču F11 !!!kristapuciitis wrote:wtf
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Kad uzspiežu debug mode un spaidu F11, tad, neatkarīgi no breakpoint salikšanas, visu laiku izlec logs un es tieku aizsūtīts uz kādu _file.c, kuru es nemaz nebiju rakstījis.bubu wrote: 100 un 1 reizi prasu - ko tev saka debugeris? Kas precīzi krašo, un kurā rindā un kā? Paspaidi taču F11 !!!
- Attachments
-
- Bez nosaukuma.png (22.95 KiB) Viewed 13372 times
Gooby pls
Re: problēma
Kura ir pēdējā tava koda rindiņa, kura aizlec uz turieni?
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Ja pieliek breakpointu pie katras funkcijas sākuma, arī pie main, tad vienalga uzreiz parādās tas logs un mani aizsūta pie cita faila. Nav tā, ka bultiņa parādās uz pointera un nekādi logi neizlec.
Gooby pls