Page 4 of 5

Re: problēma

Posted: 16 Feb 2012, 01:47
by bubu
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.

Re: problēma

Posted: 16 Feb 2012, 10:42
by kristapuciitis
Es neko nesaprotu =(

Re: problēma

Posted: 16 Feb 2012, 10:54
by snake5
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?

Re: problēma

Posted: 16 Feb 2012, 11:00
by bubu
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

Re: problēma

Posted: 16 Feb 2012, 14:03
by kristapuciitis
snake5 wrote: P.S. Breakpointu māki uzlikt / zini, kas tas ir?
Zinu, bet tagad salīdzināšu savu kodu ar http://lazyfoo.net/SDL_tutorials/lesson29/index.php , meklēšu atšķirības.
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;
};

Re: problēma

Posted: 16 Feb 2012, 18:13
by kristapuciitis
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.

Re: problēma

Posted: 16 Feb 2012, 18:28
by bubu

Code: Select all

	std::ifstream map( "map.map" );
	if( map == NULL || map.is_open() == false)
	{
		return false; 
	}
map mainīgais NAV pointeris, to nevajag salīdzināt ar NULL. Ja grib zināt vai fails ir atvēries, to var darīt šādi:

Code: Select all

	std::ifstream map( "map.map" );
	if (!map)
	{
		return false; 
	}
kristapuciitis wrote:wtf
100 un 1 reizi prasu - ko tev saka debugeris? Kas precīzi krašo, un kurā rindā un kā? Paspaidi taču F11 !!!

Re: problēma

Posted: 16 Feb 2012, 18:34
by kristapuciitis
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 !!!
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.

Re: problēma

Posted: 16 Feb 2012, 20:08
by bubu
Kura ir pēdējā tava koda rindiņa, kura aizlec uz turieni?

Re: problēma

Posted: 16 Feb 2012, 20:25
by kristapuciitis
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.