Lazarus Faq/hu
│
العربية (ar) │
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
magyar (hu) │
italiano (it) │
日本語 (ja) │
한국어 (ko) │
português (pt) │
русский (ru) │
slovenčina (sk) │
中文(中国大陆) (zh_CN) │
中文(臺灣) (zh_TW) │
Lazarus GY.I.K.
folyamatban...
Általános
Mi a Lazarus?
A Lazarus egy kereszt-platformos integrált fejlesztői környezet (IDE), melynek segítségével grafikus felületű (GUI) és parancssoros Object Pascal programok készíthetők, és amely a futtatható állományok elkészítéséhez a Free Pascal fordítót használja. Jelmondata írd meg egyszer, fordítsd le bárhol: a program forráskódja lefordítható egy másik operációs rendszeren futó Lazarus-szal (vagy keresztfordítóval) és az így létrehozott állomány futtatható lesz azon a rendszeren.
Részletekért lásd: A Lazarus és a Free Pascal áttekintése
Miért olyan nagyok a létrehozott binárisok?
A binárisok azért nagyok, mert hibakeresési információkat is tartalmaznak, amelyekre a gdb (GNU Debugger) használatakor van szükség.
A fordítónak van egy kapcsolója amellyel el lehet távolítani a hibakeresési információkat a futtatható állományból (-Xs), de egy hiba miatt (a 2.0.2 és korábbi változatokban) ez nem működik megfelelően. A hiba már javítva van a fordító 2.0.4 és későbbi változataiban.
Használhatod a 'strip' nevű programot a hibakeresési szimbólumok eltávolításához a futtatható állományból. Ez a lazarus könyvtárában található (például: lazarus\fpc\bin\i386-win32\).
Csak írd a parancssorba: "strip --strip-all <a_futtatható_fájl_neve_útvonallal>".
Ha még kisebbre akarod a programod méretét, kipróbálhatod az UPX programot. Az UPX egy nagyon jó tömörítő kifejezetten futtatható állományok tömörítéséhez. Nem foglal feleslegesen memóriát a helyben történő kitömörítés alatt. Nagyon gyorsan tömöríti ki az állományokat (~10 MB/másodperc egy Pentium 133 gépen).
Az UPX hazsnálatához írd a parancssorba: "upx <a_futtatható_fájl_neve_útvonallal>".
Miután mindkét parancs (strip és upx) is lefutott, egy Lazarus-szal készített egyszerű GUI alkalmazás mérete kb. ennyi lesz:
- ~ 700kb Linux-on
- ~ 420kb Windows-on
Részletesebb választ az UPX használatának esetleges hátrányairól is, itt olvashatsz: Size Matters (angolul).
Fontos megjegyezni, hogy a lazarus 'hello world' példaprogram már eleve tartalmaz nagyon sok fontos összetevőt. Tartalmazza:
- XML kezelő függvénytár
- Képkezelő függvénytár png, xpm, bmp és ico fájlokhoz
- Majdnem minden widget-et a LCL-ből (Lazarus Component Library)
- Az teljes Free Pascal Runtime Library-t
Ezért nagyon nagy, de már majdnem mindent tartalmaz amire egy a valódi világnak készülő és komoly alkalmazásnak szüksége lehet.
A Lazarus által készített futtatható állományok nagy mérettel kezdődnek, de csak lassan nőnek, köszönhetően a Free Pascal fordítónak és a módnak ahogy a lazarus ablakok működik. Egy c++ projekt (csak példa, de más nyelvekre / eszközökre is igaz) kis mérettel kezdődneka 'hello world' esetében, de méretük gyorsan a sokszorosára nő amikor egy szükséged van összetevőkre egy komoly alkalmazás írásához.
Gyors útmutató a Lazarus/FPC alkalmazások méretének csökkentéséhez (tesztelve a Lazarus 0.9.26 változatával)
- 1. "Project|Project Options|Compiler Options|Code|Smart Linkable (-CX)" -> Bejelölve
- 2. "Project|Project Options|Compiler Options|Linking|Debugging|" minden törölve kivéve a "Strip Symbols From Executable (-Xs)" -> Bejelölve
- 3. "Project|Project Options|Compiler Options|Linking|Link Style|Link Smart (-XX)" -> Bejelölve
A legfontosabb elem a 2. Egy egyszerű alkalmazás esetén a futtatható állomány mérete 1-3 MB körül lesz 15-20 MB helyett. Ezen a ponton megpróbálhatod ezt: "Project|Project Options|Compiler Options|Code|Optimizations|smaller rather than faster" -> Bejelölve (Figyelem: ez csökkentheti a tejesítményt)
- 4. (Esetleg) Futtasd az "UPX <te_futtatható_programod>" parancsot a bináris állomány tömörítéséhez a -2 vagy -3 paraméterrel (Figyelem: mint fentebb olvashattad, az UPX használatának lehetnek hátrányai).
Méretek változása egy üres alkalmazás esetén, beállítások és operációs rendszerek függvényében
A tesztekhez változatok: Lazarus 0.9.29 és FPC 2.4 (Windows-on FPC 2.2.4). Az Optimized compiler a fentebbi tanácsok alkalmazását jelenti UPX használata nélkül. A Default Lazarus pedig azt ahogy telepítve lett a csomagból/telepítővel. Az LCL without debug informations jelentése, hogy a Lazarus IDE és LCL hibakeresési információk nélküli (-g-) újraépítése után.
Default Lazarus | LCL without debug informations | |||
Ubuntu 64 bits / Lazarus 64 bits | ||||
Default application | 13,4 Mb | 7,5 Mb / 8 | ||
Optimized compiler | 4,4 Mb | 2,70 Mb (0.29svn FPC2.4 2,5) | ||
Ubuntu 32 bits / Lazarus 32 bits | ||||
Default application | 19,6 Mb | 5,7 Mb | ||
Optimized compiler | 2,9 Mb | 1,6 Mb | ||
Windows XP 32 bits / Lazarus 32 bits | ||||
Default application | 11,8 Mb | 2,14 Mb | ||
Optimized compiler | 1,62 Mb | 1,50 Mb | ||
Windows Seven 64 bits / Lazarus 64 bits | ||||
Default application | 12,3 Mb | 3,20 Mb | ||
Optimized compiler | 2,14 Mb | 2,16 Mb |
Hiba: 'Fatal: Circular unit reference between a and b'
Ez egy gyakori dolog, ami az új felhasználókkal történhet, amikor két form-ot készít, melyekből egymás tulajdonságait akarja elérni. A fenti hiba az interface részben a uses használatakor keletkezik, ezért a hivatkozást át kell tenni az implementation részbe. Példa:
Ez hibát okoz:
unit a; interface uses b; implementation end. ... unit b; interface uses a; implementation end.
Ez viszont nem:
unit a; interface implementation uses b; end. ... unit b; interface implementation uses a; end.
Miért lassú az alkalmazások építése Windows-on?
Ez a hiba javítva lett az FPC 2.2 és a Lazarus 0.9.24 változataiban. Frissítsd a Lazarus-t. Régebbi változatokkal kapcsolatban olvasd el a következő szöveget.
Általánosságban elmondható, hogy a fordítási idő Windows-on több időt vesz igénybe, mint más rendszereken, mert a GNU Linker, amit a Free Pascal használ lassú ezen a rendszeren. Ez a jelenség csak a Windows-on áll fenn, és csak a régebbi gép (1Ghz alatt) valamint kevés memória (128MB vagy kevesebb) esetén zavaró.
Ezen kívül, ha az LCL-t a "smartlink" kapcsolóval használod akkor az összefűzés sokkal lassabb lesz. Egy leírás erről itt található: File size and smartlinking (angolul - kidolgozás alatt)
Egy belső összefűző (linker) lett kifejlesztve, de csak a Free Pascal 2.2 változatától kezdve lesz elérhető (természetesen az SVN-ből is elérhető). Látványosan lecsökkenti az összefűzés idejét.
Megjegyzés: A 2.1.1 változat Windows-on egy olyan belső összefűzőt használ amely már egy kicsit gyorsabb. Az ezzel újrafordított Lazarus kb. 280MB-ot foglal el.
Melyikre van szükségem: ppc386.cfg vagy fpc.cfg?
Csak az fpc.cfg kell neked. Így a fordító tudja hogy hol vannak a függvénytárak.
Hogyan fordítsam a lazarus-t?
Valahogy így:
$ cd lazarus $ make clean all
Hogyan fordíthatok más projekteket, amik az LCL-en az alapulnak?
Ha nem használhatod az IDE-t a fordításhoz, használd a 'lazbuild' programot. Ez egy parancssoros változata az IDE-nek, lazarus projektek és csomagok építéséhez. Ha az LCL alkalmazást az IDE és a lazbuild nélkül akarod elkészíteni, add következő sorokat az fpc.cfg fájlhoz:
# searchpath for other toolkits (Linux) -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/{Készleted}
# searchpath for other toolkits (Windows) -Fu/{LazarusKönyvtárad}/components/units/{Készleted}
- Ahol {a Készleted} a következők lehetnek: gtk2, gnome, qt vagy win32. Ez után futtasd ezt a parancsot:
- ppc386 projekted.pp
Megjegyzés: Ne felejtsd el telepíteni a fejlesztői csomagokat az adott készlethez, különben egy ehhez hasonló üzenetet kaphatsz: 'Linker message: cannot find -l'.
Melyik FPC változatra van szükség?
A Lazarus 0.9.28 legalább az FPC 2.4 változatát igényli.
Nem tudom fordítani a Lazarus-t
- Ellenőrizd, hogy a fordító megfelő változatát használod
- Ellenőrizd, hogy a függvénytárak (fpc) ugyanehhez a változathoz valók
- Ellenőrizd, hogy a fordító telepítési útvonalának nevében vannak-e szóközök. Ne legyenek!
- Ellenőrizd, hogy van-e fpc.cfg fájl és nincs régi ppc386.cfg
- Nézd át az operációs rendszerrel összefüggő GY.I.K.-t
Amikor egy projektet fordítok, hibaüzenetet kapok
"Cannot find Unit interfaces". Hogyan oldjam meg?
Ez azt jelenti hogy a fordító nem találja az 'interfaces.ppu' fájlt vagy azt jelenti, hogy talált, de hibás vagy érvénytelen (régi).
Ez a unit megtalálható a "{LazarusDir}\lcl\units\{TargetCPU}-{TargetOS}\{LCLWidgetSet}\interfaces.ppu" útvonalon. Például: "/home/username/lazarus/lcl/units/i386-linux/gtk/interfaces.ppu".
Ellenőrizd, hogy csak ott van. Ha több változatod is van interfaces.ppu fájlból, akkor valószínűleg rosszak a beállításaid (például hozzáadtál egy LCL könyvtárat a keresési útvonalhoz). Töröld az interfaces.ppu minden példányát, kivéve egyet a fenti könyvtárban.
Ha más ablakelem-készletet (widgetset) választottál mint amivel a Lazarus készült, le kell fordítanod az LCL-t is ehhez az ablakelem-készletet.
Ha ott van, de mégis ezt a hibaüzenetet kapod akkor eltérő fordítót/rtl-t használsz a projekted fordításához, mint amivel a Lazarus IDE készült. A következők egyikét teheted:
- Építsd újra az LCL-t (vagy az egész Lazarus-t) az "Environmnent Options" között kiválasztott fordítóval. Ezt megteheted a "Tools|Build Lazarus" menüponttal. Előtte nézd át a vonatkozó beállításokat a "Tools|Configure Build Lazarus" menüpontra kattintva.
- Változtasd meg a kiválasztott fordítót az "Environment Options" között arra amelyikkel a Lazarus-t fordítottad. Figyelmesen nézd meg az "Environment Options" között, hogy a megfelelő útvonal van-e beállítva a "Lazarus Directory" és az "FPC sources directory" mezőben. Ellenőrizd, hogy csak egy változata legyen a fordító beállításait tartalmazó fpc.cfg fájlnak - ennek helye a /etc/ könyvtár Linux/Unix rendszereken vagy Windows esetén az a könyvtár ahol az FPC fordító található. Próbáld futtatni az "fpc -vt bogus" parancsot hogy ellenőrizhesd melyik fpc.cfg van használatban a rendszereden. Felesleges példányok maradhatnak amikor újabb változattal frissíted a fordítót; ezek a felhasználói könyvtáradban vagy abban a könyvtárban lehetnek amelyben az új fordítót építetted. TÖRÖLD EZEKET!
- Esetleg megváltoztathatod a projekt számára kiválasztott ablakelem-készletet. Egy példa: az "objectinspector" ami a Lazarus része alapértelmezés szerint gtk-ra van beállítva. Ennek fordítása biztosan előidézi a "Can't find unit interfaces" üzenetet Windows-on. Az ablakelemek átállítása "default(Win32)"-re megoldja a problémát: "Project|Project Options|Compiler Options...|LCL Widget Type (various)".
Amikor egy delphi projektet akarok fordítani Lazarus-szal, hibaüzenetet kapok
at the line :{$R *.DFM} Hogyan oldhatom meg ezt a problémát?
A Lazarus (vagy inkább a Linux) nem ismeri az adatforrásokat (resources), abban a formában ahogy a Delphi/Win32 használja. Ezért a Lazarus egy másik módot alkalmaz amely nagyjából egyenértékű vele. Használhatod a Delphi ablakelrendezéseket (.dfm fájlokat) a következő lépésekkel:
- Szükséged van a .dfm fájlok szöveges változatára. A D5 és újabb változatok ilyet készítenek alapértelmezés szerint. Ha régebbi fájljaid vannak: Alt+F12 hogy szövegként lásd aztán másolás/beillesztés. Ha szöveges .dfm fájlod van, csak másold egy .lfm fájlba.
- Készíts egy fájlt a lazres programmal (a lazarus/tools könyvtárban található): lazres formod.lrs formod.lfm
- Add a következő sorokat a "initialization" részhez:
initialization {$I formod.lrs}
Tartsd észben, hogy még nem minden tulajdonságot (property) támogat a Lazarus, amik a .dfm fájlokban előfordulhatnak, ezért esetleg összeomolhat.
Szerk: Az FPC 2.4.0 óta, a Delphi stílusú adatforrások is támogatottak, így már semmit sem kell megváltoztatnod. Megjegyzés: még mindig ajánlott a Lazarus Delphi project converter használata, mivel előfordulhatnak nem támogatott tulajdonságok.
'Identifier not found LazarusResources'.
Amikor a Lazarus létrehoz egy form-ot, hozzáad néhány unitot a unitod uses részéhez. Azonban Delphi unitok Lazarus unittá átalakításakor ez ez nem történik meg. Ezért neked kell hozzáadnod az LResources unitot a form unitjának uses részéhez.
Amikor egy objektum eseménykezelőjét hívom, pl. egy gomb az onclick()-jét akkor a következő hibaüzenetet kapom: 'ERROR unit not found: stdCtrls'
Ellenőrizd a "Project|Project Inspector"-ban, hogy a projekted az 'LCL' csomagokon alapul és hogy telepítetted az FPC forráskódjait.
A Lazarus a fejlesztőkörnyezet (IDE) és az LCL vizuális komponensek együttese. Minden egyéb, mint az IO, a Database, az FCL és az RTL az FPC által van biztosítva. Az IDE igényli az összes forráskód útvonalát.
Az FPC forráskódjainak útvonala beállítható a menüből indulva: "Environment|Environment Options|Files|FPC source directory"
Hogyan építhetek be egy kis fájlt a futtatható állományba, hogy ne legyen külön fájl? Hogyan építhetek be erőforrást?
Például:
/lazarus/path/tools/lazres sound.lrs sound1.wav sound2.wav ...
Létrehozza a sound.lrs fájlt a sound1.wav és sound2.wav fájlokat felhasználva.
Ezután illeszd a kódodba a form .lrs *után*:
... initialization {$i unit1.lrs} // ez a fő erőforrás fájl (első) {$i sound.lrs} // felhasználó által meghatározott erőforrás fájl end.
A programodban így használhatod:
Sound1AsString:=LazarusResources.Find('sound1').Value;
Mit jelentenek a különböző fájltípusok amiket a Lazarus használ?
A Lazarus Tutorial#The Lazarus files cikk részletesen, példákkal írja le a fájltipus kiterjesztéseket. Ez egy összefoglaló lista:
*.lpi
- Lazarus Project Információ fájl (XML formátum; tartalmazza a projekt egyedi beállításait)
*.lpr
- Lazarus Program fájl; a főprogram Pascal forráskódját tartalmazza
*.lfm
- Lazarus Form fájl; információkat tartalmaz egy form összes eleméről (egyedi, a Lazarus által használt szöveges formátum; a műveletek Pascal forráskóddal megírva a megfelelő
*.pas
fájlban találhatók) *.pas
vagy*.pp
- Pascal forráskódú Unit (tipikusan egy form-hoz tartozik amelynek adatai a megfelelő
*.lfm
fájlban találhatók) *.lrs
- Lazarus Resource fájl (erőforrás, ez egy generált fájl; nem szabad összetéveszteni a Windows erőforrás fájlokkal).
- Ilyen fájlokat a lazres (a Lazarus/Tools könyvtárban található) eszközzel lehet létrehozni a parancssorból indítva: lazres fajlom.lrs fajlom.lfm
*.ppu
- Lefordított unit
*.lpk
- Lazarus csomag (package) információ fájl. (XML formátum; a csomag egyedi beállításait tartalmazza)
Amikor egy szövegfájlt deklarálok így: var mytext: text; , Hibaüzenetet kapok: "Unit1.pas(32,15) Error: Error in type definition". Hogyan javíthatom?
A TControl osztály (class) rendelkezik egy Text nevű tulajdonsággal (property). Egy form-hoz tartozó eljárásban (method) ennek elérhetősége elsőbbséget élvez a System unitban található Text típushoz képest. Használhatod a TextFile típust, ami egy álnév a Text típus számára, vagy a típus megadásakor a típusnév elé írhatod a unit nevét.
var MyTextFile: TextFile; MyText: System.Text;
Hasonló jelenség előfordulhat a szöveges fájl azonosítók kiosztásakor és a fájlok bezárásakor is. A TForm rendelkezik assign és Close eljárással (method) is. Használhatod az AssignFile és CloseFile eljárásokat vagy beszúrhatod a System unit nevét.
Hibaüzenetet kapok amikor a Printer.BeginDoc-ot használom
A Printers unitot hozzá kell adnod a uses részhez.
A Printer4Lazarus csomagot hozzá kell adnod a projekted függősdégeihez (requirement) az IDE menüjéből indulva: "Project|Project Inspector|Add|New Requirement|Package Name:"
Ha a Printer4Lazarus csomag nincs a legördülő listában amikor megnyitod akkor telepíteni kell. A csomag része a Lazarus telepítésnek és megtalálható ebben a könyvtárban: "[lazarus installed directory]\components\printers"
Ha az alapértelmezett telepítési könyvtárat használtad akkor a [lazarus installed directory] útvonala:
- Windows: c:\lazarus
- Linux: /usr/lib/lazarus
Ugyanez a megoldás alkalmazható ha a Printer.Printers-re hivatkozáskor kivétel (exception) keletkezik.
Miért egyenlő a TForm.ClientWidth/ClientHeight és a TForm.Width/Height
A TForm.Width/Height nem tartalmazza a keretet, mivel nem volt lehetséges lekérdezni a keret méretét minden rendszeren. Megbízható módszer nélkül az LCL rendellenesen mozgathatná vagy a végtelenségig átméretezhetné az ablakokat a képernyőn.
Azonban ha lesz megbízható eljárás egy ablak és kerete méretének, illetve helyzetének lekérdezésére minden rendszeren, akkor ez meg fog változni. A régebbi LCL form-okkal való kompatibilitás megtartása érdekében, az új változathoz néhány további eljárás (method) is hozzá lesz adva.
Hibakereső (Debugger)
Hogyan láthatom a hibakeresés kimenetét?
Az LCL tartalmaz két eljárást az LCLProc unitban a hibakereső kimenetre történő íráshoz. Ezek a következők:
- DebugLn: úgy működik mint a WriteLn, de csak string paramétert fogad el.
- DbgOut: úgy működik mint a Write, de csak string paramétert fogad el.
Normális körülmények között a kimenet az stdout-ra kerül. Ha az stdout zárt (például amikor az alkalmazás {$AppType Gui} vagy a -WG opciókkal lett lefordítva Windows-on), nem lesz írás a kimenetre.
A hibakeresés kimenete fájlba is írható. Az LCLProc unit az initialization részében ellenőrzi a Lazarus.exe parancssori paramétereit a '--debug-log=<file>' kapcsolót keresve. Ha megtalálja akkor a további hibakeresési kimenetek a <file>-ba lesznek írva.
Ha nincs megadva a '--debug-log' parancssori paraméter, akkor egy xxx_debuglog nevű környezeti változó létezését ellenőrzi az operációs rendszerben, melyben az xxx a programfájl neve kiterjesztés nélkül. A Lazarus számára ez lazarus_debuglog. Ha egy ilyen környezeti változó létezik, akkor az így megadott fájlt fogja használni a hibakeresési kimenetre írt adatok mentéséhez. Például: ha ezt teszed:
set lazarus_debuglog=c:\lazarus\debug.txt
a hibakeresési kimenet a c:\lazarus\debug.txt fájlba lesz írva.
Minden alkalmazás amely használja az lclproc unitot, használhatja ezt a lehetőséget.
- Lazarus hibakeresés
- A leghasználhatóbb módszer Windows-on a konzolt használata kimenetként, ehhez add az {$APPTYPE console} direktívát a lazarus.pp-hez, aztán építsd újra a Lazarus-t.
Hogyan figyelhetem a tulajdonságokat? (property)
A legutóbbi fejlesztői (2.5.1) vagy a 2.4-es változatot kell használnod.
Ha az alkalmazást a -gw (dwarf debug info) használatával fordítod, akkor figyelheted a tulajdonságokat.
Megjegyzendő hogy ez csak olyan a tulajdonságokra igaz amelyek közvetlenül változókat takarnak (a "read" deklaráció az osztály egy tagjára mutat és nem egy funkcióra).
Ha a tulajdonság egy művelet végeredményét adja vissza akkor nagyon veszélyes azok kiértékelése/figyelése. Szükséges lehet a művelet végrehajtása, és ez néha változók értékének megváltoztatását eredményezheti. Egyszerűbben fogalmazva megváltozhat az alkalmazásod állapota a hibakeresőben, és a további kódfuttatás, hibakeresés vagy figyelés érvénytelen eredményt adhat.
A lehetőség az eljárások visszatérési értékének figyelésére (a fentebbi kockázatok mellett), és e miatt kódok hívása a Debugger-ből még nincs kidolgozva.
Miért nem mutatja a hibakereső az egyes Változókat/Struktúrákat ("no such symbol"/"incomplete type")
A következő hibakeresési problémák esetén:
- tulajdonságok (property-k)
- array of ... (dinamikus tömbök)
- változók beágyazott eljárásokban
- "no such symbol in context"
- "incomplete type"
olvasd el ezt a cikket: GDB Debugger Tips (angol)
Hogyan használható a hibakereső, csomagokban található FCL komponenseken Lazarus-szal
Az FCL komponensek és osztályok alapértelmezetten hibakeresési információk nélkül lettek lefordítva és ezért a gdb nem tudja elérni az metódusokat és a tulajdonságokat. A komponensek csomagjait újra kell építeni a "-gl" kapcsolóval.
A következő példa feltételezi hogy egy Linux összeállítás használatát a /usr/local/ telepítési útvonallal és azt hogy az fcl-db adatbázis kezelő csomag az aminek tartalmaznia kell a hibakeresési információkat. A példában az fcl-db szerepel, de értelem szerűen bármely más csomaggal is működik.
Mielőtt elkezded, meg kell keresned az FPC beállításait tartalmazó fájlt: /etc/fpc.cfg. Nézd át a tartalmát és keresd meg az FPC telepítési útvonalát. Keress az fpc.cfg fájlban egy sort aminek az elején -Fu található:
-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/*
A Make szkriptek által lefordított unitok az INSTALL_PATH/lib/fpc/$fpcversion/units/$fpctarget/ könyvtárba kerülnek, ezért biztosnak kell lenned abban hogy a telepítési útvonal a /usr/local, és ezt kell megadni INSTALL_PREFIX-ként, különben a Make által fordított unitok olyan helyre is kerülhetnek ahová nem tartoznak vagy a Make szkriptek hiba miatt le is állhatnak.
1. lépés: Nyisd meg a terminál ablakot
2. lépés: cd /user/local/share/src/fpc-2.3.1/fpc/fcl-db/
3. lépés: sudo make clean all install INSTALL_PREFIX=/usr/local OPT=-gl
Megjegyzés: az INSTALL_PREFIX paramétert megfelelően be kell állítani a unitok megfelelő elhelyezése érdekében!
A példában a /usr/local az alapértelmezett telepítési útvonal Linux-on, de más operációs rendszereken más lehet.
make clean all install INSTALL_PREFIX=/usr/local OPT=-gl
Végül bármelyik FCL unit újrafordítása után szükséges lehet az LCL újrafordítása is ugyanígy.
Gondok a GDB használatával macOS rendszeren
Olvasd el a hibakereső tippeket Mac rendszerhez (angol)
Közreműködés / Javítás a Lazarus-ban
Készítettem egy foltot (patch) amivel az IDE Üzenetek (Messages) ablaka a Forráskód-Szerkesztő (Source Code Editor) aljához rögzíthető
Ezeket a foltozásokat nem alkalmazzuk, mivel az ablakok kívánt összekapcsolási módjának csak egy kis része van kidolgozva bennük. A cél egy teljes rögzítéskezelő-rendszer elkészítése és használata. Egy teljes rögzítéskezelő-rendszer az IDE összes ablakát össze tudja kapcsolni a felhasználó által meghatározott módon. Például az üzenetek ablakát a forráskód-szerkesztő fölé vagy alá vagy... vagy semmit sehová. Minta:
+-------------------++--+ |menü || | +-------------------+| | +--++---------------+| | |PI|| Forráskód ||CE| +--+| Szerkesztő || | +--+| || | | |+---------------++--+ |OI|+-------------------+ | ||üzenetek | +--++-------------------+
A rögzítéskezelő tudja elmenteni az elrendezést és visszatölteni a következő betöltéskor. A rögzítéskezelőnek nem szükséges a fogd és vidd módszert használnia. Minden foltozgatás ami rögzítéskezelő nélkül kapcsolja össze az ablakokat, nehézzé teszi egy rögzítéskezelő kidolgozását és vissza lesz utasítva.
Ideiglenes megoldásként használhatod ezt a kiegészítést az IDE-hez: Manual Docker
Javítottam/fejlesztettem a Lazaruszon. Hogyan adhatom hozzá a változtatásokat a hivatalos Lazarus forráskódhoz?
Készíts egy foltot (patch) és küldd el a fejlesztőknek. Részletek itt találsz: Creating A Patch. (angolul)
Hogyan lehetek Lazarus fejlesztő, az SVN és a hibakövető (bug-tracker) kezelője?
Mindenek előtt: tanulj a Lazarus-ról, ezzel növelve a tudásod és a hozzáértésed. Kezdd a wiki cikkek olvasásával, olvasd át a Lazarus forráskódját, vess néhány pillantást a Lazarus Bug-Tracker, javíts ki néhány hibát, és ha úgy gondolod készen állsz, vedd fel a kapcsolatot a fejlesztőkkel a levelezőlistán.
Hol vannak a ... definiciók
Virtuális billentyű konstansok
A virtuális billentyű konstansok az LCLType unitban vannak definiálva. Add a uses részhez az LCLtype unitot.
Az IDE használata
Hogyan használhatom az "azonosító kiegészítés" ("identifier completion") lehetőséget?
Az azonosítók kiegészítése a ctrl+szóköz lenyomásával kérhető. Beállítható az automatikus kiegészítés késleltetése is, a menüből indulva: 'Environment|Editor Options|Code Tools|Automatic Features'.
Linux
Hogyan használhatom a hibakeresőt az IDE nélkül?
Mindenek előtt egy hibakeresőre lesz szükséged. Linux-on a szabványos hibakereső a gdb, melyhez több grafikus felületű kezelőprogram is készült. Egy gyakran használt ilyen program a ddd, mely a legtöbb Linux disztrinúciónak része. A lazarus/lcl hibakeresési információkkal történő fordításához és a hibakeresés indításához a következőwith parancsokat kell kiadni:
$ make clean; make OPT=-dDEBUG $ ddd lazarus
Legyél figyelmes, mivel a ddd nem teljesen úgy működik mint a Lazarus hibakaresője. Ha egy változó tartalmát kell megjeleníteni ügyelned kell arra, hogy a ddd/gdb megkülönbözteti a kis és nagy betűket, miközben a Pascal nem teszi ezt. E miatt az összes változó nevét nagy betűkkel kell írnod, hogy láthasd a tartalmukat. További információkat az FPC dokumentációjában találsz.
Tudom futtatni a hibakeresőt, de ddd nem találja a forráskódjaimat vagy panaszkodik, hogy nincs bennük kód. Mi ez?
Ez az útvonalakkal kapcsolatos hiba a gdb és a ddd esetében is. Így kerülheted el:
- Használt a "Change directory" (könyvtár váltása) parancsot a ddd menüjéből és válaszd a könyvtárat ahol a forráskódok találhatók. E módszer hátránya hogy nem tudod használni a teljes forráskódot az így indított programhoz (pl.: Lazarus). Ezért több alkalommal is szükség lehet könyvtárváltásra.
- A ddd menüjében kattints az [Edit] [gdb-settings] lehetőségre és állítsd be a keresési útvonalat
- Hozd létre a $(HOME)/.gdbinit fájlt a következőképpen:
directory /utvonal/lazarus directory /utvonal/lazarus/lcl directory /utvonal/lazarus/lcl/include
Hibaüzenetet kapok az összefűzés közben, ami azt mondja "/usr/bin/ld can't find -l<valami_lib>"
- Csomag alapú összeállítások
- Telepítened kell azt a csomagot, amelyik tartalmazza a lib<valami_lib>.so vagy lib<valami_lib>.a fájlokat. A dinamikus függvénytárak névkiterjesztése linux-on .so, a statikus függvénytáraké pedig .a. Néhány Linux összeállításban telepítve van az adott (rpm, deb) csomag amely tartalmazza a <valami_lib> állományt, de ilyenkor is telepítened kell a fejlesztői (rpm, deb) csomagokat, amelyek neve általában <csomagnév>-dev, amiben megtalálható a függvénytár .a (statikus) és/vagy .so (dinamikus) változata.
- Egyes összeállításokban van parancs amellyel meg lehet keresni, hogy melyik csomag tartalmaz egy adott fájlt:
- Mandriva
[]$ urpmf lib<valami_lib>.so
- listát készít az összes csomagról amely tartalmazza a lib<valami_lib>.so fájlt, ezek közül az egyik -devel végződésűt kell telepítened.
- Debian
- telepítsd az apt-file eszközt (apt-get install apt-file) majd
[]$ apt-file search lib<valami_lib>.so
- listát készít az összes csomagról amely tartalmazza a lib<valami_lib>.so fájlt, ezek közül az egyik -dev végződésűt kell telepítened.
SuSE
A SuSE a gtk fejlesztői függvénytárakat a /opt/gnome/lib könyvtárba telepíti (vagy a /opt/gnome/lib64 könyvtárba 64 bites rendszeren), ami nem a szokásos helye a függvénytáraknak. Egyszerűen add ezt az útvonalat a /etc/fpc.cfg fájlhoz (így: -Fl/opt/gnome/lib).
Hogyan alakíthatok át kylix 2 projektet Lazarus projekté?
Amikor a Lazarus-t fordítom a fordító nem talál egy unitot. pl.: "gtkint.pp(17,16) Fatal: Can't find unit GLIB"
1. Ellenőrizd egy tiszta fordítással is, így: 'make clean all'
2. Ellenőrizd, hogy a fordító megfelelő változatát használod (2.0.4 vagy újabb)
3. Ellenőrizd, hogy a fordító a megfelelő beállítási fájlt használja-e. A normál telepítés létrehozza a /etc/fpc.cfg fájlt, de az FPC keresni fogja a ~/.ppc386.cfg, ~/.fpc.cfg, /etc/ppc386.cfg fájlokat is és csak azt használja amelyiket előbb találja meg.
- Tipp: Megtudhatod, hogy melyik beállítási fájl van használatban a következő paranccsal: 'ppc386 -vt bogus'
- Törölj minden ppc386.cfg ha már nincs rá szükséged.
4. Ellenőrizd, hogy a beállítási fájl (/etc/fpc.cfg) a megfelelő útvonalakat tartalmazza. Három, ezekhez sornak kell a fájlban:
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl -Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
- Az útvonalak első része (/usr/lib/fpc) a rendszeredtől függ. Egyes rendszereken például /usr/local/lib/fpc/... .
- Tipp: A keresési útvonalakat is megjelenítheted a következő parancsal: 'ppc386 -vt bogus'
5. Ellenőrizd, hogy a beállítási fájl (/etc/fpc.cfg) nem az LCL forráskódokra (.pp, .pas) mutató útvonalakat tartalmaz:
nem jó: -Fu(lazarus_source_directory)/lcl nem jó: -Fu(lazarus_source_directory)/lcl/interfaces/gtk
- Ha az LCL-t minden FPC projektedhez hozzá akarod adni, ellenőrizd hogy a két útvonal úgy néz ki mint a következők és fenti FPC lib útvonak után vannak elhelyezve:
-Fu(lazarus_source_directory)/lcl/units/$fpctarget -Fu(lazarus_source_directory)/lcl/units/$fpctarget/gtk
6. Ellenőrizd, hogy a hiányzó unit (glib.ppu) megtalálható az fpc lib könyvtárban. Például a gtk.ppu megtalálható a /usr/lib/fpc/$fpcversion/units/i386-linux/gtk/ könyvtárban. Ha nem létezik akkor az fpc lib sérült és újra kell telepíteni.
7. Ellenőrizd, hogy a fájlok egy csatolt NFS könyvtárban vannak-e. Néhány esetben az NFS frissítések helytelenül hozhatnak létre fájlokat. Próbáld meg áthelyezni a forráskódokat egy nem NFS könyvtárba és ott fordrítani.
8. Ha még mindig nem sikerült próbáld használni a samplecfg szkriptet a következő módon:
# cd /usr/lib/fpc/version/
# sudo ./samplecfg /usr/lib/fpc/\$version /etc
Figyelem! Ne írj / jelet az etc után, mert ha így teszel a rendszer a /etc/fpc.cfg/fpc.cfg fájlt hozza létre. Valójában pedig azt akarjuk, hogy a samplecfg a egy fájlt hozzon létre /etc/fpc.cfg néven és ne a /etc/fpc.cfg könyvtárat.
A bináris változatot telepítettem, de egy egyszerű projekt fordításakor a Lazarus ezt írja:: 'Fatal: Can't find unit CONTROLS'
Valószínűleg újabb FPC csomagot használsz annál mint amivel a Lazarus binárisok készültek. A legjobb megoldás a forráskódok letöltése és a Lazarus újrafordítása. Letöltheted a legfrissebb forráskódot (snapshot) vagy használhatod az svn rendszert:
$ bash $ svn checkout http://svn.freepascal.org/svn/lazarus/trunk lazarus $ cd lazarus $ make clean all
Ellenőrizd hogy a Lazarus számára meg van-e adva a forráskódok könyvtárának új útvonala, a menüből indulva: "Environment->General Options->Files->Lazarus Directory Top"
A Lazarus lefordítható, de az összefűzés leáll ezzel: 'libgdk-pixbuf not found'
Telepítsd a gdk-pixbuf függvénytárat a gtk1.x-hez:
A gdk-pixbuf függvénytár megtalálható a következő helyeken:
RPM csomagok: http://rpmfind.net/linux/rpm2html/search.php?query=gdk-pixbuf&submit=Search+...&system=&arch=
Debian csomagok: libgdk-pixbuf-dev
Forráskódok: ftp://ftp.gnome.org/pub/gnome/unstable/sources/gdk-pixbuf/
Külső hivatkozások: term papers writing service termpapers
Ubuntu 8.10:
Ha a Lazarus-t GTK 2-0 változattal fordítod hibaüzenetet kapsz arról, hogy a "libgdk-pixbuf2.0" nem található. Csak telepítsd a libgtk2.0-dev csomagot az apt-vel így:
apt-get install libgtk2.0-dev
SuSE rendszeren ezt kapom: '/usr/bin/ld: cannot find -lgtk Error: Error while linking'
Régebbi SuSE változatokban (SuSE 11 előtt) telepíteni kell a gtk fejlesztői függvénytárakat a /opt/gnome/lib (vagy a /opt/gnome/lib64 64-bites rendszeren) könyvtárba, ami nem a szabványos elhelyezés a függvénytárak számára. Add a könyvtárat az /etc/fpc.cfg-hez (-Fl/opt/gnome/lib).
A Lazarus összeomlik 'runtime error 211' hibával, miután egy komponenst telepítettem
Egy komponens telepítése után a Lazarus összeomlik a következő üzenettel:
Threading has been used before cthreads was initialized. Make cthreads one of the first units in your uses clause. Runtime error 211 at $0066E188
Hogyan javítsam?
A fissen telepített komponens szálakkal (threads) dolgozik. Az FPC *nix rendszereken nem építi be automatikusan a szálak támogatását, de szükség van rá. Ennek elindítása a cthreads unitban történik. Minden alkalmazásban, amely a komponenst használja, a főprogram uses részéhez kell adni a cthreads unitot. Ez alól maga a Lazarus sem kivétel. Ez két módon lehetséges:
1) Nyisd meg a csomagot. A csomagszerkesztőben kattints az Options-ra. A Usage lapon add a custom sorhoz a -dUseCThreads kapcsolót. Ezután építsd újra az IDE-t. Így a cthreads unit automatikusan használva lesz az IDE-ben unix alatt és a cthreads el lesz indítva.
2) A csomagok módosításának elkerüléséhez, az FPC fordító parancssori kapcsolójának közvetlen használata szükséges. A kattints a Tools->Configure "build Lazarus" menüpontra. A megjelenő ablakban a Lazarus építési beállításai találhatók, ahol az "Options:" mezőbe írd be -Facthreads és kattints az "OK" gombra. A következő lépés a csomag telepítése. A Lazarus a -Facthreads kapcsolóval lesz újraépítve ami azt jelenti hogy a főprogram úgy lesz értelmezve mintha a cthreads unit mindig ott lenne elsőként a uses részben
Tipp: A régi (össze nem omló) Lazarus is megtalálható lazarus.old néven, ugyanabban a könyvtárban ahol az összeomló Lazarus futtatható állomány van.
Lásd még: Multithreaded_Application_Tutorial#Units_needed_for_a_multithreaded_application (angol)
Amikor egy szálakkal (threads) dolgozó programot futtatok, hibaüzenetet kapok: 'runtime error 232'
A fordító hibaüzenete a következő:
This binary has no thread support compiled in. Recompile the application with a thread-driver in the program uses clause before other units using thread. Runtime error 232
Megoldás: Add a cthreads unitot elsőként a uses részhez a főprogramodban, ami általában egy .lpr fájl.
Ubuntu Breezy/Mandriva KDE3 használatakor a betűk a Lazarus IDE-ben túl nagyok
A Lazarus a Gtk1.2-re lett fordítva, a Gnome betűtípus beállításai nincsenek hatással a programra, mivel azok a Gtk2-re vonatkoznak. Próbáld meg így: Hozz létre egy fájlt .gtkrc.mine néven a felhasználói (home) könyvtáradban (ha még nincs ott) és add hozzá ezeket a sorokat:
style "default-text" { fontset = "-*-arial-medium-r-normal--*-100-*-*-*-*-iso8859-1,\ -*-helvetica-medium-r-normal--*-100-*-*-*-*-*-*" } class "GtkWidget" style "default-text"
Ha ez nem elég, próbálj létrehozni egy .gtkrc szimbolikus linket ami a .gtkrc.mine fájlra mutat. Ez a megoldás működött Xubuntu 7.10, Mandriva 2009.0 KDE3 rendszereken.
Hogyan használhatnak a gtk programjaim különböző .rc fájlokat?
a) lehetőség: Nevezd át az rc fájlt programod.gtkrc névre és helyezd át ugyanabba a könyvtárba ahol a futtatható állomány van.
b) lehetőség: Használd a GtkInt unitot és a következő függvényhívást: GTKWidgetSet.SetRCFilename('kiválasztott_rc_fájl'); Ezt a legjobb az Application.Initialize művelet előtt megtenni az .lpr fájlban {$IFDEF LCLGtk} direktívával.
c) lehetőség: Használd a gtk2 unitot és a gtk_rc_parse('kiválasztott_rc_fájl')); valamint a gtk_rc_reparse_all; függvényhívásokat.
Ubuntu-t használok és nem tudok Gtk2-re fordítani, hiányzó függvénytárak miatt
Az Ubuntu esetében gondot okoz hogy nincsenek minden esetben létrehozva a szimbolikus hivatkozások még akkor sem ha egyébként a függvénytárak telepítve vannak.
Mielőtt Gtk2-re fordítasz ellenőrizd, hogy minden hiányzó függvénytárhoz létezik a megfelelő szimbolikus link. Ilyesmit kell tenned:
cd /usr/lib sudo ln -s libgdk-x11-2.0.so.0 libgtk-x11-2.0.so
Ellenőrizd, hogy a [valami].so szimbolikus hivatkozás létezik és az aktuális függvénytárra mutat.
Hogyan fordíthatok egy programot Gtk2-re?
A Gtk2-re fordított IDE egyelőre nem teljesen stabil, de fordíthatsz szoftvert Gtk2-re a Gtk1-es IDE használatával.
Először az LCL újrafordítása szükséges Gtk2-re. A menüben kattints "Tools->Configure Build Lazarus" pontra, majd az LCL-nél válaszd a "clean+build"-et és minden másnál "none"-t. Ezután kattints az "OK" gombra.
A menüben kattints a "Tools->Build Lazarus" pontra.
Most már fordíthatod a szoftveredet Gtk2-re ha "Compiler options" között az ablakelemkészletet (widgetset) Gtk2-re állítod.
Ezt az üzenetet kapom: "[WARNING] ** Multibyte character encodings (like UTF8) are not supported at the moment."
Ez a hiba nem fordul elő a 10535 (0.9.21) számú változat utáni kiadásokban. Ezt megelőzően figyelmeztetésként szolgált UTF-8 kódolt szövegek használata esetén.
A belső kulcskezelő eljárások gtk1 esetében nem tudták kezelni az igy kódolt billentyűleütéseket, ami azzal járt hogy például ékezetes karakterek esetében rosszul vagy egyáltalán nem érzékelte őket.
(eredeti szöveg régebbi Lazarus változatokhoz)
Ez a figyelmeztetés azt jelenti hogy utf-8 karakterkódolást használsz. Amennyiben Gtk 1-et használsz ez komoly probléma lehet és megakadályozhatja a Lazarus vagy a vele készített alkalmazások megfelelő működését.
A megoldás, hogy átállítod a helyi karakterkódolást nem utf-8 módra mielőtt a parancssorból elindítod a programot, így:
export LC_CTYPE="pt_BR" export LANG="pt_BR" export LANGUAGE="pt_BR" ./lazarus
A pt_BR helyére természetesen a te országod azonosítója kerüljön. Az automatikus beállításhoz szkriptet is készíthetsz.
Windows
Amikor a 'cycle' fordítást használom, ezt kapom: 'The name specified is not recognized as an internal or external command, operable program or batch file.>& was unexpected at this time'.
A fordító könyvtárában van egy OS2 parancsfájl make.cmd névvel. Különböző Windows változatok is parancsfájlként ismerik fel ezt, törlöd, mert bár ez szükséges OS2-n, de gondot okoz Windows-on.
Amikor 'cycle' fordítást használom, ezt kapom: 'make[3]: ./ppc1.exe: Command not found'
Nem tudni miért, a make elfelejti az útvonalat. Próbáld meg a 'cycle' fordítást az alapkönyvtár beállításával futtatni, így: make cycle BASEDIR=your_fpc_source_dir_herecompiler
Amikor a Lazarus-t újra akarom fordítani (make parancsal), üzenetet kapok:
make.exe: * * * interfaces: No such file or directory (ENOENT). Stop.make.exe: * * * [interfaces_all] Error 2
Frissítened kell a make fájlt.
makefile:27: *** You need the GNU utils package to use this Makefile. Stop.
Ellenőrizd, hogy az FPC-t nem egy olyan útvonalra telepítetted, aminek a nevében szóköz is van. A Makefile-ban nem támogatott.
Hogyan adhatok a programomnak XP kinézetet, mint amilyen a Lazarus-nak is van?
A menüből indulva: "Project|Project Options|Use manifest to enables themes" legyen bejelölve.
Amikor egy Lazarus-szal készített alkalmazást futtatok, az DOS ablakkal indul
Add meg a -WG paramétert (Windows GUI) a fordító parancssorában vagy jelöld be a 'Win32 GUI alkalmazás' jelölőnégyzetet a Lazarus IDE fordítói beállításai között, a menüből indulva: "Projekt / Projekt beállításai / Fordító beállításai / Beállítás és cél / Cél-függő beállítások / Win32 GUI alkalmazás (-WG)".
macOS
Miért áll le a fordítás 'unknown section attribute: no_dead_strip' üzenettel?
A 'halott' kódok kiszedését nem támogatja az assembler és az összefűző (linker) az Xcode 1.5 előtt (elérhető a Panther 10.3.9 változatban). Kapcsold ki a következő fordítói beállításokat:
- Code > Unit style > Smart linkable (-CX)
- Linking > Link Style > Link smart (-XX)
Hibakeresés
Olvasd el a hibakereső tippeket Mac rendszerhez (angol)
Engedélyek (Licencek)
Készíthetek kereskedelmi alkalmazásokat a Lazarus-szal?
Igen, az LCL az LGPL engedélyei szerint használható egy olyan kivétellel/kiegészítéssel, amely megengedi a statikus összefűzést (linkelést) az alkalmazásod forráskódjának közreadása nélkül. A változtatásokat és fejlesztéseket az LCL kódjában azonban annak forráskódjával együtt terjeszteni kell. A Lazarus IDE a GPL licenc hatálya alatt áll. Az LCL csak azokat a forráskódokat tartalmazza melyek az 'lcl' könyvtárban találhatók, egyéb kódokat nem szabad ide elhelyezni és ezzel álcázni.
Miért van egyes komponensek használata korlátozva kereskedelmi alkalmazásokban?
A Lazarus tartalmaz harmadik féltől származó komponenseket is. Ezek különböző engedélyek szerint használhatók. Ha használni szeretnéd őket, meg kell nézned az engedélyeket a csomagok forrásfájljaiban. A legtöbb harmadik féltől származó komponens a "components" könyvtárban található.
Honnan tudhatom meg, hogy egy komponens az LCL része-e?
Minden LCL unit az 'lcl' könyvtárban található. Az LCL részét képező unitok listája megtalálható a http://lazarus-ccr.sourceforge.net/docs/lcl/ címen. Ha kódodban egy itt fel nem sorolt unitot használsz, valószínűleg egy olyan komponenst használsz amely nem része az LCL-nek.
Készíthetek kereskedelmi bővítményt a Lazarus-hoz?
Igen, az IDEIntf nevű része az IDE-nek az LGPL engedélyei szerint használható az előbb említett kivétellel, így az abban megosztott adatstruktúrák nem köteleznek arra, hogy a bővítményedet vagy a tervező csomagodat a GPL hatálya alá helyezd. Szabadon választható bármilyen engedélyezésű bővítmény; nem akarjuk korlátozni a választást. Röviden: nem-GPL kompatibilis bővítmények használata is megengedett. Megjegyzendő, hogy nem megengedett egy már lefordított Lazarus terjesztése statikusan beépített, nem-GPL kompatibilis bővítményekkel; azonban szerintünk ez nem komoly korlátozás, mivel a Lazarus könnyen újrafordítható.
A fórum használata
Miként tehetek fel kérdéseket helyesen a fórumban?
Első és legfontosabb: Mindig említsd meg melyik Lazarus, Free Pascal, Vezérlőkészlet (widgetset), CPU és Operációs Rendszer (pontosan meghatározott) változatot használod! Nem elég annyi hogy a "legfrissebb", mindig egyértelmű változatszámot adj meg. Napi kód (fejlesztői változat) esetén a felülvizsgálat száma (revision number) és/vagy dátuma is fontos.
Amikor arról érdeklődsz, hogy valami miért nem működik mindig mellékelj egy rövid forráskódot, ami bemutatja a problémát. A forráskódot a [code] és [/code] címkékkel fogd közre (vagy használd a kód beszúrására használatos gombot a fórum eszköztárán). Teljes programokat (forráskód) is mellékelhetsz zip-be csomagolva, ehhez jól használható a Lazarus "Projekt / Projekt közzététele ..." menüpontja.
Ha hibajelzést kapsz a kódoddal kapcsolatban mindig írd meg a hibaüzenetet. A fordító, a hibakereső vagy a programod által jelzett hiba egyszerű másolása a legtöbb esetben elegendő lehet. Ha a hibajelzés a programod futása közben keletkezik használd a -gl (sorszámok megjelenítése futási hibák esetén) kapcsolót és ne használj "inline" kódot a fordításkor, így megfelelő információk készülhetnek a visszakövetéshez.
Gyakran egy kép is hasznos lehet. Képeket feltölthetsz a http://imageshack.us/ és hasonló oldalakra, aztán add meg a linket.
Próbálj meg általános áttekintést adni a feladatról (mi a megvalósítandó cél) és lehetőleg minél részletesebb leírást a problémáról (milyen módon próbálod megvalósítani a célt). Gyakran van sokkal egyszerűbb módja a dolgok véghezvitelének, melyről esetleg nem tudsz.
Végül, de nem utolsó sorban, győződj meg róla, hogy minden vonatkozó dokumentációt megkerestél és el is olvastál (pl. FPC dokumentáció és a Lazarus wiki, lásd pl. Lazarus dokumentáció. Továbbá kereshetsz a fórumon is válaszokat: mások talán már találkoztak ugyanazzal a problémával és megoldásaik is lehetnek. Ha látható, hogy már próbáltál megoldást találni az emberek szívesebben segítenek.
Arról, hogy miként tehetsz fel kérdéseket okosan, itt olvashatsz: Hogyan kérdezzünk okosan: http://esr.fsf.hu/smart-questions_hu.html
Közreműködők és megjegyzések
Ez az oldal az angol nyelvű oldal fordítása, mely az epikwiki változat alapján készült.