Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Változó értékének megváltozása használat nélkül 2023 jan. 12 09:50 #2636

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Természetesen! Köszi minden infót.

Változó értékének megváltozása használat nélkül 2023 jan. 12 09:47 #2635

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Azért ha megvan a megoldás, oszd már meg légyszi a közösséggel, hagy okuljunk!
Köszike!
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

Változó értékének megváltozása használat nélkül 2023 jan. 11 21:53 #2634

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Akkor a fordító beállításait kell birizgálni (pl. bájthatárra igazítás meg ilyenek (pl. ezt a Lazarusban nem találtam)) és megoldódik a probléma...
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

Változó értékének megváltozása használat nélkül 2023 jan. 11 21:42 #2633

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Az én fejemben minden rendszerhívás, amit nem én vezérelek :)

Tényleg csak találgatás, de amúgy sem tudnék feltölteni egy ekkora kódot. Kis programoknál nem csinálja, azok kevés memóriával is beérik. Tényleg egyszer találtam a Lazarus-hoz egy beírandó opciót valahol a compiler dolgai között, de már nincs meg... Attól megjavult az egész. Adatbázist nem használunk, az csak bonyolítja a helyzetet. Ezek környezetvédelmi mérőrendszerek, teljesen egyedi szoftverek. Textbe dolgoznak , mert a legzordabb helyzetben is tudni kell az adatokkal bánni (mint a NASA-nál).

Nem tudom hol kell kérni, de valaki lezárhatná a topicot.

Változó értékének megváltozása használat nélkül 2023 jan. 11 21:12 #2632

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Az OnChange nem rendszerhívás, hanem csak az FPC / LCL bizgerentyűje... (nem kötözködöm)
Na mindegy, kódrészlet nélkül találgatás az egész...
Linux alatt nem ugyanaz a sorrend a rendszerüzeneteknél (signál?) és az üzenet sem olyan mint Windows alatt, ha jól tudom.
Rengeteg sor listában való tárolásához és ezekből rengeteget tárolni nem lenne egyszerübb valami adatbázist használni? (Csak kérdezem, nem tudom, mi jót csinál a progi)

 
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

Változó értékének megváltozása használat nélkül 2023 jan. 11 20:24 #2631

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Igazad van, tényleg lokálist írtam, azok nem maradnak meg. Ezek globálisak és a hibás működéskor megnéztem debug módban, akkor jöttem rá, hogy elcseszi, pedig az adott rutin nem használja azt a változót, aminek megváltozott az értéke. Nos, már belefutottam olyanba is, hogy azért változott meg egy globális változó értéke, mert a rendszer ráfuttatta a végrehajtást egy olyan rutinra, ami rendszerhívás - pl. egy onchange metódus. Ezekre véletlenül jöttem rá, F7-tel kellett lépésről lépésre néznem az összes rendszerrutinra futást, mert a sima F8 debug nem mutatott meg ilyeneket, minden helyénvalónak tűnt.

Nagyon tisztelem a fejlesztőket, amiért a rendszert "hobbiból" és támogatásokból folyamatosan fejlesztik egy csomó rendszerre. Én egy ilyenhez már csak halovány pislákolás vagyok tudásilag. Mégis sokat kínlódok vele. Most pl. egy 6MB-os kódom van, amit windows alatt nem is tudok debuggolni, még rendszergazdaként sem, mindig fatális debugger hibát jelez. Linux alatt simán megcsinálja.

Windowsnál más hibákba is belefutottam, amik szerintem a windows bajai, mert linuxon és linux/wine pároson csont nélkül lefutnak. Nagyon sok adatot kezelek a memóriában (átlag 70 karakteres text sorokból van 5600 egy stringlistben, ezekből a listákból pedig van kb. 70-80. Na ezen a windows szintén elhasal, kiteszi a karikát és onnantól halott... A linux és a wine hiba nélkül lekezeli.

Változó értékének megváltozása használat nélkül 2023 jan. 11 19:06 #2630

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Csak azért írtam amit írtam, mert azt írtad, hogy lokális változók!

Adott 2 lokális változó - nevezzük valt1-nek (integer) és valt2-nek (integer). A valt1-nek adok egy alapértéket. Aztán pár programsorral később a valt2-t inicializálását egy függvény visszaadott értéke végzi. Ez eddig tiszta.

Így viszont lehet debuggolni... :)
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

Változó értékének megváltozása használat nélkül 2023 jan. 11 17:38 #2629

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Hello.

Igen, igaz minden, amit írtál. Nem most kezdtem programozni, hanem 1983-ban... bvan némi tapasztalatom. Nem véletlenül írtam, amit írtam. Nem lokális változó, hanem globális. Inicializálva. Mégis, mikor végigmegy egy meghívott procedurán, amiben NINCS használatban ez a változó, mégis megváltozik! Egyszer a neten találtam rá egy beállítást, de nem volt annyi eszem, hogy valahol rögzítsem a hasnoló időkre! 

Azért tettem fel ezt a topicot, mert reméltem, hogy más is belefutott hasonlóba... természetesen a fostaliga Windows alatt...

Változó értékének megváltozása használat nélkül 2023 jan. 11 17:05 #2628

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Hi!

Gábor mesternek van igaza! Így nemigen lehet segíteni!
Helyi változó ha inicializálva van értékkel, akkor az van benne amit beletettél. Ha egy változó nincs inicializálva, akkor memóriaszemét van benne (olyan nehéz kezdőértéket adni neki?), ha a fordító nem inicializálja.
A két helyi változónak nem lehet ugyanaz a címe, ezért nem lehet hogy csak úgy megváltozzon magától (hacsak valahol az integer érték be nem kerül egy pointer helyére és éppen pont..., de akkor segfault...)
A helyi változó a metódus vagy függvény visszatérése után megszünik létezni! A függvénynek cím szerint átadott paraméterváltozó az nem helyi változó, érték szerint átadott változó pedig másolattal dolgozik, ami a függvény végén megszünik mint helyi változó.
 
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

Változó értékének megváltozása használat nélkül 2023 jan. 11 16:03 #2627

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Mint írtam, ezt nemigen fogom tudni feltölteni több okból sem. Az egyik, hogy elég nagy kód kell hozzá, hogy előforduljon, a másik ok, hogy akkor egy olyan kód kerül ide, ami egyelőre nem publikus. A kérésem az, hogy zárjuk le ezt a topicot, sajnos nemigen találkoztak ilyen problémával eddig. Nagyon köszönöm.

Változó értékének megváltozása használat nélkül 2023 jan. 11 15:08 #2626

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Próbáld reprodukálni a jelenséget és az azt produkáló forráskódot feltölteni, mert ez így nem segít a "hiba" keresésében.
Ha nem sikerül megismételni akkor el kell zárni az emléket egy titkos cellába...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Változó értékének megváltozása használat nélkül 2023 jan. 09 21:07 #2625

  • stickel
  • stickel profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Sziasztok,

Nem tudom, hogy valaki foglalkozott-e már ezzel a kérdéssel, de elég komoly bajom van - és bármelyik lazarus/freepascal verzióban előjött a hiba. Egyszer találtam rá egy lazarusba beírandó beírandó compiler opciót - amit persze nem mentettem -, de sajnos nem találtam meg azóta. Nem tudok példaprogramot írni, mert csak egy bizonyos programméret fölött kezdődnek az ilyen bajok.
 
Adott 2 lokális változó - nevezzük valt1-nek (integer) és valt2-nek (integer). A valt1-nek adok egy alapértéket. Aztán pár programsorral később a valt2-t inicializálását egy függvény visszaadott értéke végzi. Ez eddig tiszta. 

A hiba:
- a függvény meghívása után nem csak valt2 értéke változik meg, hanem valt1 is felveszi ugyazat az értéket, amit valt2-kapott. Na ez mi a fenétől lehet? Szerintem memória kezelési gond. Nem egetrengető méretű a program, de nem is 10 sor...

A hiba csak egy adott kódméret fölött kezdődik és mindegy, milyen verziót és oprendszert használok. Rettenetesen dühít. Belefutottam már olyan hibákba is, amikor olyan procedurákra fut rá, amikre nem is mehetne. Erre is írok példát:
meghívok egy klikk után egy összeadást szubrutint. Amint elkezdődik ennek a végrehajtása, előtte ráfut HÍVÁS NÉLKÜL egy teljesen más, mondjuk szorzást végző rutinra, aztán mint aki jól végezte a dolgát, visszatér az összeadás rutinra...

Köszönöm az ötleteket.

  • Oldal:
  • 1