Kezdőoldal » Számítástechnika » Programozás » Egyszerűen szeretném megtaláln...

Egyszerűen szeretném megtalálni: hol akad ki a Pascal program runtime error hibával. Mlyen módon tegyem ezt? (bővebben lent)

Figyelt kérdés

Ha a program kiakad Runtime Error hibával és viszonylag nagyon sok helyen előfordulhat a kiakadás, a memóriacímet pedig nem tudom illetve az üzenetben ez nekem semmit nem mond, nem debug-golni szeretnék, hanem a forrásban javítani a hibát.

Nem hiszem hogy jó móka soronként végigmenni a programon és eljátszani azt, hogy:

{$I-}

<művelet ahol kiakadhat>

if ioresult <>0 then writeln('első kiakadás');

{$I+}

Így tovább az összes lehetséges műveleten, kissé mókás lenne, remélem, van egyszerűbbb megoldás.



2014. dec. 21. 20:13
 1/5 anonim ***** válasza:

Nézd át töviről-hegyire a forráskódot, és ha egyáltalán nem találod a hibát, akkor nincs más megoldás. Régen programoztam már pascalban, de nekem úgy rémlik a program megpróbálja kiírni a konkrét sort, ahol a hiba van. Az alapján már behatárolható.


Ha meg nem, akkor nincs más megoldás, mint amit írtál.

2014. dec. 21. 20:18
Hasznos számodra ez a válasz?
 2/5 coopper ***** válasza:

Szia.


A runtime errornál nem véletlen van ott a memória cim.


A régebbi pascaloknál, (turbo, borland) a Search \ Find Error \ Error Address -hez beirodod a kapott memória cimet (xxxx:xxxx formában) és a forrásban a forditó arra a sorra ugrik ahol a hiba keletkezett.


Nem irtad milyen pascallal dolgozol, igy a többiról nem tudok nyilatkozni, de gondolom az "újjab" kiadásokban ez már nem gond, mert azokban már igen fejlett hibakezelés van. (Delphi, Lazarus, Free pascal).


Sok sikert.

Üdv.

2014. dec. 21. 20:46
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Ha a fordítónál be van kapcsolva a debug info, akkor a kódba belefordítódnak a forráskód sorszámai, és akkor ki tudja írni a hibaüzenetben (elvileg). Ha mégsem írja ki, akkor lehet, hogy valami memóriafoglalási, vagy pl. rendszerhívás szintű hiba van.

Amúgy csak egy sima kiiratást kell beszúrni, hogy "eddig jó", és ezt kell pakolgatni a kódban. Ki lehet vele szűrni a sort, ahol a hiba keletkezik. Néha nem konkrétan ott hibás a kód, de lehet következtetni, hogy mi lehet. (Pl. egy grafikus video beállítás lehet hogy jó, csak a driver nem tudja végrehajtani, stb.)

2014. dec. 22. 00:52
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

Elvileg a {$ASSERTIONS ON} fordítási direktíva hivatott a probléma megoldására (A FPC manual szerint) de sajnos ez se írja ki a sorszámot...


Hova, milyen keresőbe írhatnám be a Runtime Error által kapott memóriacímet, egyik válaszoló ezt írta, csak mivel sosem használtam, nem tudom mire gondol...

2014. dec. 22. 08:24
 5/5 coopper ***** válasza:
54%

Szia.


Én irtam - de azt is irtam, hogy ezek a régebbi pascalokra vonatkoznak, úgymint Turbo pascal vagy Borland pascal.


De visszatérve a gondodra, ha Free pascalt használsz akkor tedd a következőket, inditsd el a Free pascal programot:


- "Options" menű pont \ "Debugger" almenű \ A megjelenő ablakban tedd a csillagot "*" a következő szöveg elé : "Generate also backtrace line information". majd OKézd le. Mentsd is el. (Options - Save menüpont segitségével)


Nyisd meg a pascal progrmaodat és futtasd. Amikor bekövetkezik a hiba, akkor OKézd le a hibát, majd menj a felhasználói képernyőre (Debug \ User screen ALT+F5 menüpont). Itt láthatod a sor számát ahol a hiba keletkezett. Jegyezd meg, lépj ki a felhasználói képernyőből (ESC gomb).


A fenti három képernyő képként : [link]


Most : Search \ Go to line number ... menüpont és beirod a hibás sor számát és máris láthatod, hogy hol keletkezett a runtime error.


Sok sikert.

Üdv.

2014. dec. 22. 10:32
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!