Sist endret: 17.06.2004  
 

JBuilder (versjon 9)

JBuilder er et såkalt IDE - Integrated Development Enviroment - hvilket vil si at det er fullstendig overkill bare for å debugge en enkelt java-fil, slik vi skal i dette kurset. Det er beregnet til å administrere prosjekter og har masse avansert funksjoner vi ikke har bruk for. Bare se bort fra dem. Dessverre er vinduet til JBuilder litt fullt. For de som foretrekker en enklere løsning, foreslås jdb, som er kommandolinje-basert.

Registrering

Bla-bla-bla:
JBuilder Personal har blitt installert av drift som en "vennetjeneste" til studentene. Man må selv skaffe seg en lisens fra Borland. Dette fordi NTNU ikke har kjøpt lisenser til JBuilder. Heldigvis er lisensene til JBuilder Personal nesten gratis, det eneste som kreves er at du registrerer kontaktinformasjon om deg selv, slik at Borland kan spørre deg hvor fornøyd du er med JBuilder Personal. Du blir en slags beta-tester altså, bare ikke på en beta-versjon, men på en versjon som ikke har like mange funksjoner som JBuilder Enterprise. Det skulle likevel være nok funksjoner å ta av, selv om noen småting er litt irriterende. For eksempel at TAB-størrelsen er 2 og ikke kan endres.

Det essensielle:

  • Gå til http://www.borland.com/products/downloads/download_jbuilder.html og klikk på "Personal" under "Keys Only (If you have a CD)" for versjonen som er installert på datasalene (versjon 9 høsten 2003).
  • Du kommer nå til et innloggings-skjema. Klikk på "New User". (Vel, hvis du har registrert deg før, kan du jo bare logge inn...)
  • Registrer deg (husk å ta vekk kryssene for å bli sendt diverse reklame og informasjon dersom du ikke ønsker dette)
  • Verifiser e-post-adressen din (dit lisensen blir sendt)
  • Vent litt
  • Sjekk e-posten og lagre vedlegget (lisensen) et eller annet sted
  • Start JBuilder og fortell hvor du lagret lisensen når du blir spurt

Bruke JBuilder (bruke/opprette filer)

Første gang JBuilder startes opp, tilbys du en tutorial. Denne tar ca. 10 minutter å lese dersom du hopper over alt som er irrelevant. Hvis du ikke er vant med å bruke programmer som JBuilder anbefales du å lese denne!

For å kunne kompilere og kjøre (og debugge) programmer, må de ligge i et prosjekt. Jeg anbefaler å opprette et prosjekt der du legger inn alle algdat-øvingene. Da har du enkel tilgang på tidligere øvinger, om du vil se på noe. For å opprette dette prosjektet:

  • File -> New Project
    • Name: algdat
    • Type: jpx
    • Directory: m:\skole (katalogen algdat blir evt. opprettet her, og prosjektfilene lagres under denne. Under algdat opprettes katalogene classes, doc og src, som inneholder hhv. kompilerte filer, javadoc og kildekode)
    • Template: (Default project)
    • Add project to active project group: Må være på i Personal
    • Generate project notes files: Av
  • Next >
    • Output path: Du kan fjerne classes om du ønsker å få kompilerte filer under m:\skole\algdat
    • Backup path: Best å la være
    • Working directory: Best å la være
    • Arkfanen source: Klikk og endre path som inneholder src dersom du ønsker å lagre kildefilene under m:\skole\algdat
  • Next >
    • Encoding: Default
  • Finish

Når du har et prosjekt kan du gjøre ett av to:

Legge til eksisterende filer (dersom du har lastet ned rammeverket):

  • Last ned rammeverket, HallgrimX.java og evt. andre filer, til m:\skole\algdat\src\
  • Høyreklikk på algdat.jpx
  • Klikk på "Add Files / Packages / Classes ..."

Opprette nye filer (dersom du kopierer rammeverket fra nettleseren)

  • Høyreklikk på algdat.jpx eller <Project Source>
  • Klikk på New -> Class...
    • Package: (tom)
    • Class name: HallgrimX
    • Base class: java.lang.Object
    • Options:
      • Public: På
      • Generate main method: Av (På om du lager en test-klasse)
      • Generate header comments: Av
      • Generate default constructor: Av
      • Override superclass constructors: (ingen betydning)
      • Override abstract methods: (ingen betydning)

Kjøre program

For å kjøre Hallgrim-programmene riktig, må navnet på innputt-filen gis med som et parameter. Gjør slik:

  • Run -> Configurations...
  • New... / Edit...
  • Name: Dummy
  • Build target: Make
  • Run:
    • Type: Application
    • Main class: (velg HallgrimX)
    • VM paramaters: (tom)
    • Application parameters: m:\skole\algdat\input.txt
  • Debug: (la være)
  • Optimize: (la være)
  • OK
  • Kryss av i Default-kolonnen
  • OK

Når du har konfigurert main-klassen og parameterne riktig, kan du kompilere og kjøre programmet ved å klikke på "Play"-symbolet i verktøylinja, velge Run -> Run Project eller trykke F9. Det er ikke nødvendig å lagre filene først.

Debugging: Finne kompileringsfeil

Med mindre dette har blitt skrudd av, viser JBuilder en rekke kompileringsfeil mens du skriver. Dette markeres med røde streker under feilene og til venstre står det en liste over hvilke feil som for tiden er funnet. Det burde derfor være mulig å rette de fleste kompileringsfeil uten å kompilere.

Når du kjører prosjektet (F9), kompileres det. Dersom det er noen kompileringsfeil vises disse i ei liste nederst. Klikk på en feil for å åpne den fila feilen er i på den linja feilen er oppdaget.

Debugging: Kjøring av programmet i debug-modus

Dette er grunnen til å bruke JBuilder. Alt som står over dette avsnittet er stort sett bare ull som er nødvendig for å kunne utføre det vi skal snakke om etterpå og nå:

  • Breakpoints (stopp-punkter)
  • Step Over execution (stegvis utføring, metodekall behandles som ett steg)
  • Step Into execution (stegvis utføring, metodekall fører til stegvis utføring av metoden som kalles)
  • Run to Cursor (kjør til markørens linje treffes på)

Det er tre måter å starte programmet i debug-modus på:

  • Debug Project (fra verktøylinja eller Run -> Debug Project eller Shift+F9). Utførelsen vil stoppe når den kommer til et stopp-punkt, så dette er bare brukelig dersom du har satt noen stopp-punkter som utførelsen kommer til.
  • Step Over (Run -> Step Over eller F8)
  • Step Into (Run -> Step Into eller F7)

De to siste kan også brukes for å fortsette utførelsen etter at den har stoppet. I tillegg kan Resume Program (fra verktøylinja i kjørevinduet nederst eller Run -> Resum Program eller F9) brukes for å fortsette programmet. Da til neste stopp-punkt påtreffes.

Breakpoints (stopp-punkter):
Det er to måter å sette et stopp-punkt på. Den enkleste (og mest primitive) er å venstreklikke i margen til høyre for linjenummeret på den linja der du vil sette ut stopp-punkt. Når utførelsen kommer til denne linja, stoppes programmet og du kan inspisere variablene og metodekallene. Merk at det er meget mulig at utførelsen ikke kommer til denne linja, dersom du for eksempel setter stopp-punktet inne i en if og betingelsen aldri blir oppfylt. Setter du derimot stopp-punktet på selve linja med if-betingelsen vil utførelsen stoppe der (forutsatt at den kommer dit da...

Den andre måten er å gå på Run -> Add Breakpoint -> Add Line Breakpoint... og velge hvilken klasse og linje du vil ha stopp-punktet på. Da kan du i tillegg sette en betingelse og en teller-trigger. Dette kan også gjøres ved første å sette et stopp-punkt på den vanlige måten og deretter høyreklikke på linja og velge Breakpoint Properties...
En betingelse kan f.eks. være 'n==100'. Det kan jo være hendig å ha inne i en løkke dersom du iterasjonsvariablen er n og du mistenker at det er noe problemer når den er 100. En teller-trigger fører til at utførelsen bare stoppes på stopp-punktet når utførelsen har kommet til stopp-punktet så mange ganger som angitt. Dette kan være hendig om du ikke har noen iterasjonsvariabel (f.eks. ved rekursive kall). Dersom du bruker teller-triggeren i kombinasjon med en betingelse, telles bare de gangene betingelsen er oppfylt.

Step Over execution:
Utfør neste linje. Metodekall behandles som en hvilken som helst annen linje, og fører bare til et steg.

Step Into execution:
Utfør neste linje. Metodekall fører til at neste steg er den første linje i metoden som kalles. Linja med metodekallet blir utført som ett steg når metoden som ble kalt returnerer.

Run to Cursor:
Fortsetter utførelsen til linja med markøren (der du skriver) treffes på. Dette ligner på å sette et stopp-punkt på den samme linja, men er raskere å endre på. Du slipper unna med et klikk for å flytte markøren, mens du må ha to klikk for først å fjerne et gammelt stopp-punkt og så sette et nytt. Dersom utførelsen ikke treffer på linja til markøren, fortsetter den til programmet er ferdig. Dersom et stopp-punkt treffes på før linja til markøren, vil utførelsen bli stoppet der som ellers.

Debugging: Observere programmet i debug-modus

Her er det tre viktige punkter i kjørevinduet du får nederst på skjermen når du starter programmet i debug-modus. I tillegg er det mulighet for å skrive uttrykk direkte.

  • Console output, input and errors
  • Threads, call stacks and data
  • Data watches

Console output, input and errors:
Dette er tekstboksen med kommandoen som brukes for å starte programmet og all output/input som gjøres iht. slik programmet er skrevet. Altså det du ser når du kjører programmet fra kommandolinja. Dette er den samme tekstboksen som du ser nederst når du kjører programmet i vanlig modus, men nå har du mulighet til å velge å se andre ting i kjørevinduet nederst.

Threads, call stacks and data:
Denne tre-lista er sannsynligvis den viktigste til hjelp i den debuggingen vi har bruk for. Under 'system' -> 'main' -> 'main' er det liste opp de metodene som har blitt kalt. Den som ble kalt sist er øverst. Om du klikker på plussen foran en metode, får du opp variablene i metoden og verdiene de er satt til. For arrayer (lister/tabeller) kan du trykker på pluss ytterligere en gang og få opp verdiene til alle elementene.

Data watches:
Her ser du de nåværende verdiene til de uttrykkene du har angitt. Vil du for eksempel vite hva i+j til enhver tid er, går du på Run -> Add Watch og legger inn 'i+j' på Expression. Et heller hendig alternativ til å slå opp på metoden du er i akkurat nå for å finne verdiene og så beregne formelen selv. Hvor du er når du legger inn en watch er ubetydelig. Verdien beregnes ut i fra verdien til de variablene som er tilgjengelige hvorenn utførelsen måtte være stoppet. Om de er utilgjengelige opplyses det bare om dette.

Uttrykk på direkten:
Som et alternativ til alltid å ha en "data watch" kan du evaluere verdien av et uttrykk når du kommer på behovet for det. Gå på Run -> Evaluate / Modify... Her kan du skrive inn et uttrykk, klikke på Evaluate og få vite verdien av det. Muligheten for å endre verdien av en variabel er ikke tilgjengelig i JBuilder Personal, men selv om dette er kjekt å eksperimentere med, er det ikke noe vi trenger så veldig mye.