Zpracoval: Vašek Mikolášek, 20.3.2005
Vedoucí projektu, korektury, závěrečná revize: Pavel Herout
Korektury, kontrola věcné správnosti, kontrola verzí: Marek Horák
Eclipse je platforma určená k vývoji jakýchkoliv integrovaných vývojových prostředí (IDE). Projekt eclipse.org zahrnuje všechny firmy, výrobce a teamy spolupracující na vývoji tohoto prostředí. Mezi nejvýznamější či nejznámější patří například IBM či Borland. Přestože u základů stály zejména firmy známé z komerční sféry IT průmyslu, stal se Eclipse open source projektem, který má bohatou historii a zdá se, že i slibnou budoucnost. Například firma IBM vytvořila úspěšný produkt Web Sphere Studio, který je postaven právě na platformě Eclipse.
S Eclipse se nejspíše setkáte v podobě tzv. SDK, tedy Software Development Kitu, což je balíček složený ze tří základních kamenů: Eclipse Platform, JDT - Java Development Kit a PDE - Plugin Development Kit (každý z nich samostaný a samostatně stáhnutelný). Eclipse SDK je zdarma a můžete si jej stáhnout ze stránek konsorcia eclipse.org. Balík SDK je rozšířitelný díky možnosti přiinstalovat různé moduly, chcete-li pluginy, a tak můžete pod jedním prostředím programovat v Javě, v C nebo C++ či třeba modelovat v UML. Záleží pro který rozšiřující modul se rozhodnete. V tomto článku se zaměřím na plugin CDT - C/C++ Development Tool, poskytující vývojové prostředí pro jazyk C a C++.
C/C++ Development Tool (CDT) projekt se snaží poskytnout plnohodnotný a funkčně úplný C a C++ IDE pro Eclipse. Současná verze CDT nabízí tyto prostředky (opsané ze stránek projektu):
V první části bude popsána instalace CDT pod Linuxem a Windows XP. Ve druhé pak na malém příkladu uvidíte to nejpodstatnější, co uplatníte při návrhu aplikace pomocí CDT. Cílem článku není podat podrobný návod užití CDT, ale spíše pomoci čtenáři zorientovat se v novém prostředí. Pokud čtenář nenajde odpověď na své otázky a problémy zde, má možnost podívat se na FAQ k pluginu CDT, nebo přímo na stránky projektu, kde má velkou šanci doklikat se pomoci.
Hned na začátku jedna trochu nepříjemná zpráva. Debugging s CDT 2.1 pod Eclipse 3.1 nefunguje. V nadcházející verzi CDT 2.1.1 bude tento bug opraven. Zatím však, chcete-li využívat CDT plně, včetně debuggeru, je nutné mít verzi Eclipse 3.0.x.
Eclipse využívá Java VM, proto jsou pluginy pro Eclipse plně přenositelné. Nicméně určité pluginy, což je i případ CDT, či JDT (Java Development Tool) a jiných, předpokládají, že na svém počítači již máte nainstalovány nástroje pro překlad, sestavení, spouštění apod. S tím mohou být jisté komplikace, proto bude v první části článku popsáno zprovoznění CDT v závislosti na systému. Až bude vše připraveno a nainstalováno, už by se neměly objevit žádné podstatné rozdíly plynoucí z odlišnosti systémů.
První krok - instalace pluginu do Eclipse je však stejný na jakémkoliv systému. Uživatel má v zásadě dvě možnosti:
V dalším textu budeme používat znak '~'
jako zástupce pro
adresu, kam jsme nainstalovali Eclipse. Ve Windows to bude nejspíše
C:\Program Files\Eclipse
, v Linuxu zpravidla /usr/share/eclipse
.
A pro oddělení adresářů se podržíme Unixové konvence a budeme používat '/'
.
Plugin CDT s sebou nepřináší žádný konkrétní nástroj k sestavení, překladu či debugování programu, ale spoléhá na to, že máte již nějaký takový k dispozici na svém systému. Máte tedy volnost a můžete použít libovolný nástroj, který vám vyhovuje. Na druhou stranu, pokud žádný nástroj nemáte, neobejdete bez jeho dodatečné instalace.
CDT potřebuje zejména nějaké "windowsovské" ekvivalenty nástrojů jako GNU Binutils, GNU GCC a GNU make. Pokud je máte k dispozici stačí jen Eclipse (konkrétně CDT plugin) nakonfigurovat tak, aby je používal. (Používáte-li Visual Studio, kde jsou podobné programy k dispozici, lze využít i je. Zde najdete návod)
My budeme dále uvažovat, že nástroje pro překlad jazyka C dosud nemáte nainstalovány, a popíšeme si instalaci "free" nástrojů MinGW a MinSYS. Tyto programy vám poskytnou nástroje pro práci s jazykem C a navíc i základní příkazy známé z Linuxu (rm, ls,...), které je možné spouštět přímo z příkazové řádky Windows.
1.2.1 Instalace MinGW a MinSYS
MinGW
Poznámka:
MinSYS
Poznámka: Pozor! Pokud vytvoříte
V tuto chvíli byste měli mít všechny potřebné programy nainstalovány a dostupné přímo z
příkazové řádky. Zkuste do konzole napsat příkaz
Poznámka:
MinGW se ukázalo jako lepší volba než Cygwin,
protože programy přeložené pomocí MinGW lze
ve Windows rovnou spouštět, narozdíl od Cygwinu, kde je nutné spouštět programy pod jeho
prostředím (v Cygwinu je sice možnost použít při překladu přepínač --mno-cygwin, ale to
pro začátečníky není příliš elegantní řešení).
Ve druhé části tohoto tutoriálu si ukážeme, jak vytvořit projekt, jak jej překládat, spouštět a
ladit debuggerem. Přestože budou popisovány základní věci, i zkušenější uživatelé zde mohou nalézt
několik užitečných informací. Například zda vytvořit Standard Make Project, nebo
Managed Make Project, jak předat své aplikaci parametry apod.
Celý postup, od vytvoření projektu, přes překlad až po spuštění, si ukážeme na jednoduchém programu typu
Hello World. O debuggingu se dozvíte na konci této kapitoly.
Doporučený postup je nejprve nainstalovat MinGW, protože MinSYS se při své "postinstalalci" dotazuje, zda máte
MinGW nainstalováno.
MinGW-<cislo verze>.exe
.
C:\install\MinGW\
). Řiďte se pokyny průvodce instalací.
Může se stát, že se při instalaci MinGW nenainstaluje gdb.
(Nevíme proč, ale při pokusných instalacích se v jednom případě tento problém objevil.)
Pak stačí ze stránek projektu MinGW stáhnout samostatný balíček pro gdb
ze stejné stránky jako MinGW se jménem gdb-cislo_verze.exe.
Po instalaci (zeptá se na cestu, kde je nainstalován MinGW)
už v Eclipse by mělo vše fungovat jak má včetně debuggingu.
C:\install\MinGW\bin
.
Postup:
Krok 1.
V ovládacích panelech zvolte Systém a záložku Upřesnit
a pokračujte tlačítkem Proměnné prostředí.
Krok 2 Vyberte systémovou
proměnnou Path a zvolte Upravit.
Pozor! Cestu je potřeba nastavit v systémové proměnné, nikoliv v
uživatelské.
Krok 3 Na konec řetězce z Path přidejte středník a
cestu k adresáři
C:\install\MinGW\bin
a potvrďte.
V podadresářích MSYS-<cislo verze>.exe
.
C:\install\MinSYS\
). Řiďte se pokyny průvodce instalací.
C:\install\MinGW\bin
do systémové proměnné
Path.
\bin
obou nainstalovaných programů (pro nás C:\install\MinGW\bin
a C:\install\MinSYS\bin
)
jsou k dispozici všechny potřebné programy zmíněné výše. Malý háček,
se kterým si hned poradíme, je, že program make (součást MinGW) je zde pod jménem mingw32-make.exe
.
Z našeho pohledu (i s pohledu standardního uživatele MinGW) by bylo vhodnější,
aby se jmenoval pouze make.exe
. Kopii souboru získáme například příkazem z
konzole:
copy mingw32-make.exe make.exe
make.exe
ještě před instalací MinSYS, tak on vám jej při instalaci
zase přejmenuje na mingw32-make.exe
.
make
a například ještě ls
a pokud vám systém
ani v jednom případě nehlásí, že uvedený soubor či program nemohl nalézt, máte vyhráno.
II. Část - První projekt
2.1 Nový projekt
Standardně, jako ve většině vývojových prostředí, je i u CDT nutné založit projekt před tím,
než začnete psát program. Nový projekt založíte úplně stejně, jako jste to již dělali předtím
pro Javu. Volbou
File->New->Project spustíte
dialogové okno, kde ihned vidíte důkaz, zda jste CDT
úspěšně nainstalovali. V tomto okně máte teď nově možnost zvolit si C nebo C++ projekt.
Rozbalte menu pod C a uvidíte, že máte dvě volby.
Jednak Managed Make Project a
Standard Make Project.
Poznámka:
Máte-li dle doporučení nainstalováno MinGW, žádné potíže by neměly nastat.
Pokud máte instalován jiný nástroj a nemáte v něm k dispozici kompilátor
gcc, nebude generátor souboru makefile fungovat. I když lze
provést různá nastavení, tak nejsou odzkoušená a na stránkách
FAQ se jasně zmiňují o nutnosti mít k dispozici gcc (g++ pro C++).
Pro jednoduchost zvolte Managed Make Project
a pokračujte tlačítkem Next do
dalšího okna , kde uveďte název svého projektu.
V našem případě se projekt bude jmenovat prvni_c. Ještě než zvolíte Finish,
zkuste tlačítko Next a prohlédněte si
možnosti, které se vám nabízí. Máte možnost zvolit
si typ projektu a konfiguraci pro váš projekt. Jednak Debug a nebo Release.
Tyto konfigurace například určují, jaké přepínače (-Wall -ansi -pedantic a jiné) se přidají
za příkazy pro překlad, linkování apod. (jejich popis viz dále). Zaškrtněme obě možnosti.
V okně za dalším tlačítkem Next lze určit reference projektu a nějaké další parametry. Protože prvni_c je náš první céčkový projekt, je seznam potenciálních referencí prázdný.
Dokončete zakládání nového projektu tlačítkem Finish. Eclipse se vás pravděpodobně v tuto chvíli zeptá, zda se chcete přepnout do perspektivy (výběr okének a způsob jejich rozmístění po pracovní ploše) určené pro plugin CDT. Můžete zaškrtnout volbu Remeber my decision a Eclipse se vás již dál ptát nebude a spustí pokaždé perspektivu podle toho, zda jste dialog potvrdili nebo zamítli. Podle uvážení tuto nabídku potvrďte.
Klikněte pravým tlačítkem myši na menu File hlavní lišty a sjeďte až na
File->New->Source File.
V následujím okně zadáte jméno souboru.
Pozor! je třeba zadat celý název včetně
přípony. Tzn. že chceme-li přidat nový céčkový soubor prvni, musíme napsat do formuláře
Obdobně přidáváme do projektu též hlavičkové soubory, které budeme vytvářet, jen volba bude
File->New->Header File.
V tuto chvíli máme již v projektu nový prázdný zdrojový soubor a můžeme se směle pustit do
programování. Pro účely návodu si v našem případě vystačíme pouze s vypsáním několika řádek
na standardní výstup. Celý program vypadá takto:
Kdykoliv uložíte soubor se zdrojovým kódem, bude program automaticky přeložen a sestaven
(defaultně voláním příkazu
Jak vypadá pracovní plocha při překladu našeho malého programu si můžete prohlédnout
zde. Všimněte si varování, které nám CDT IDE
na příslušné řádce vyznačí jako malý vykřičník na liště při levé straně editoru. Varování bere CDT z
výstupu překladače gcc.
Přes menu Project->Properties
a následně C/C++ Build, lze
nastavit prakticky vše, co se týká sestavení programu a jeho překladu. Hned ze začátku
je dobré si uvědomit, že volbou
Debug / Release
určujeme dvě různá nastavení. Typ Debug má při překladu nastaven samozřejmě
překlad s debuggovacími informacemi a např. co největší počet
varovných hlášení.
Jako malý příklad možností
Managed Make Projektu uveďme způsob zapnutí přepínačů
Stejným způsobem lze měnit mnohá další nastavení a pokud by snad některá nebyla k dispozici, je
zde vždy možnost dopsat je ručně. Na tomto místě si můžeme povšimnout, že překlad programu z
Managed Make Projektu je vázán na překladač GCC.
Poznámka: Defaultní příkaz
Máme-li již takový soubor (a my bychom ho v tuto chvíli
již mít měli), můžeme jej volbou
Run->Run...
přidat do příslušného seznamu (C/C++) spustitelných souborů.
Zde si povšimněme, že v okně pod volbou Run->Run...
máme také možnost nastavit různé parametry spouštění. Pro nás jsou nejzajímavější parametry
(argumenty) příkazové řádky, které nalezneme pod záložkou Arguments.
Spustíte-li následně náš program s touto volbou, proběhne podle očekávání bez žádosti o zadání počtu opakování.
Začneme volbou Run->Debug... a
v nám již známém okně vybereme svou aplikaci a záložku
Debugger. Zde zvolte požadovaný
typ debuggeru, proveďte tlačítkem Apply a spusťte ladění (Debug).
Poznámka: Další malá odlišnost mezi prostředím v Linuxu a Windows XP spočívá v tom, že pod Windows se
pro váš program otevře nové
okno s příkazovou řádkou.
V Linuxu oproti tomu se vstup a výstup odehrává přímo v prostředí Eclipse v okně Console.
Viz níže.
CDT Debuugging nabízí mnohá další okna, ať už ta, která se vám otevřou rovnou při spuštění debuggeru
či ta, která si sami navolíte. V tomto tutoriálu je už blíže popisovat nebudeme, protože nejlépe se
jejich funkce zjistí a ověří prakticky.
Více o debuggingu viz
tutoriál ze
stránek CDT.
2005.03.12
2.2 Vytváření zdrojových souborů
Teď když máme svůj nový projekt založen, je čas přidat do něj také zdrojové soubory.
prvni.c
.
#include <stdio.h>
#include <stdlib.h>
int globalni_promenna = 0;
int main(int argc, char *argv[])
{
int i = 0;
if (argc > 1) {
globalni_promenna = atoi(argv[1]);
}
else {
printf("Zadej pocet opakovani: ");
scanf("%d", &globalni_promenna);
}
for (i = 1; i <= globalni_promenna; i++) {
printf("\n%d.\tPozdrav z Eclipse.", i);
}
}
2.3 Sestavení programu (building)
Způsob sestavení závisí zejména na tom, zda pracujeme na Managed Make Projektu,
nebo na Standard Make Projektu. V našem případě je to ta první možnost, a proto
se o sestavení nemusíme příliš starat. Druhou možnost zatím přenecháme zkušenějším.
Následuje tedy popis překladu programu v rámci Managed Make Projektu.
make -k all
).
Pokud se vám tento automatický překlad nelíbí, může te jej zakázat odškrtnutím
Project->Build Automatically
a sestavovat program explicitně volbou
Project->Build Project.
V tomto případě je ovšem nutné, abyste se nejdříve "překlikli" do okna
Navigation či
C/C++ Projects a zvolili konkrétní projekt, pak je teprve možné překlad provést.
Opravíme-li chybu, kterou jsme udělali, když jsme funkci s neprázdným (int) návratovým typem
ukončili bez navrácení nějaké hodnoty, projde náš příklad již
bez varování. V tuto chvíli nám do projektu
přibyl adresář Debug
a v něm spustitelný soubor prvni_c.exe
.
Oproti tomu Release má typicky zapnuty optimalizace apod. Je tedy dobré, dát
si pozor na to, který způsob vlastně zrovna nastavujeme. Zároveň, podle toho kterou z těchto
možností v tomto okně potvrdíte (tlačítko Apply ), takovou při překladu CDT použije. Ponechme
Debug.
-pedantic
a
-ansi
(přepínač -Wall
je již defaultně nastaven):
Opět v menu C/C++ Build zvolíme záložku
Tool Settings a v GCC C Compiler
větev Warnings. V pravé části okna máme nabídku s možnými přepínači, zaškrtněme volbu
Pedantic. Ve větvi Misellaneous
obdobně zvolíme Support ANSI programs. Na konzoli se můžete
přesvědčit, že vaše volby nezůstaly
bez odezvy.
make -k all
pro překlad a sestavení, lze změnit v záložce
Build Settings
2.4 Spuštění programu
Způsob spuštění není kupodivu zcela triviální záležitost, jak bychom logicky očekávali.
CDT vyžaduje, abychom nejprve program "zaregistrovali". K tomu potřebujeme
spustitelný soubor vzniklý překladem.
Celý postup je k nahlédnutí zde. A výsledek našeho snažení zde.
Pod Windows se stává, že obsah konzole není aktualizován hned poté, co jsme zavolali Debug/prvni_c.exe
).
Důležítá poznámka: CDT má občas špatně přednastavený Binary Parser a při volbě spustitelného souboru
píše, že tento soubor spustitelný není (Selection must be a binary file).
Vhodný Binary Parser nastavíte v menu
Project->Properties->C/C++ Build->Binary Parser (v různých verzích CDT
bývá bohužel na různých místech).
V systému Windows nastavte PE Windows Parser a v Linuxu potom Elf Parser.
printf("Zadej pocet opakovani: ")
a spuštění
programu potom dopadne takto. Tedy program nejprve čeká, až zadáte počet opakování a teprve potom vás o
to požádá. Tento problém se vyřeší zavoláním funkce fflush(stdout)
vždy, když potřebujeme konzoli aktualizovat (zejména před čekáním na vstup od uživatele).
2.5 Debugging
Jak již bylo zmíněno v úvodu odstavce o instalaci, ladění nefunguje pod verzí
Eclipse 3.1. Máte-li tyto potíže a nechce se vám instalovat Eclipse 3.0.x, budete nejspíš
muset až do příští verze (CDT 2.2.1) výhody "klikacího" debuggingu oželet.
2.5.1 Spuštění debuggeru
Stejně jako v předchozím odstavci, vyžaduje CDT zaregistrovat nějaký spustitelný soubor pro debugging
(nejlépe ten, který byl překládán se zapnutým debuggingem).
Ovšem registrace pro normální rozběhnutí a pro debugging je jedno a totéž. Pokud jste tedy zdárně
absolvovali předchozí odstavec, můžete se rovnou vrhnout na ladění.
Poznámka: Typ debuggeru se může lišit podle operačního systému a používaných nástrojů. V Linuxu je
jasná volba GDB Debugger a pod Windows s nainstalovaným nástrojem MinGW (viz
instalace) to bude opět GDB Debugger. (Pro nástroj Cygwin by to byla volba
Cygwin GDB Debugger.)
2.5.2 Prostředí
Poté, co jste spustili debugger, budete opět dotázáni, zda použít implicitní perspektivu pro debugging.
Tuto volbu doporučujeme. Následně se váš program inicializuje a je připraven
k ladění. Pro účely debuggingu se vám otevře několik okének a na některá z nich se teď blíže podíváme.
.exe
) souborem.
globalni_promenna
zobrazená není a to ani tehdy, když
zvolíte Add Global Variables. Protože pod touto volbou se
nám nabízí okno s možností výběru těch globálních proměnných,
které chceme zobrazit a které je v našem případě prázdné, je možné, že toto bude fungovat jen pro
proměnné deklarované pomocí extern
.
2.5.3 Doporučený postup při ladění
Nyní je na řadě několik poznámek k započetí ladění programu a jeho průběhu.
Ukončení práce s debuggerem spočívá pouze v
přepnutí perspektivy. Tady je dobré si uvědomit vlastně úlohu
perspektivy. Je to pouze jiný pohled na věc. Pozor tedy, přepnutí perspektivy neznamená ukončení běžícího (debugovaného) procesu!
Po několika krocích je stav našeho programu
takovýto.