KDevelop4/Manual/Arbejdet med kildekode

From KDE UserBase Wiki
Revision as of 07:43, 25 May 2011 by Claus chr (talk | contribs) (Importing a new version from external source)

Arbejdet med kildekode

Ved siden af fejlsøgning er skrivning og læsning af kildekode det, som du vil bruge mest tid med, når du udvikler software. Til dette formål giver KDevelop dig mange forskelige måder at udforske kildekoden og effektivisere skrivning af den. Som det vises i detaljer i de følgende afsnit, så er KDevelop ikke blot en kodeeditor — den er et system til at håndtere kildekode, som giver dig forskellige visninger af information, som findes i de filer, som tilsammen udgør kildekoden i din session.

Værktøjer og visninger

Til arbejdet med projekter har KDevelop begrebet værktøjer. Et værktøj giver dig en særlig visning af kildekoden eller en handling, som det kan udføre. Værktøjer repræsenteres af knapper, som findes rundt omkring i vinduets kant (med lodret tekst langs venstre og højre kant eller vandret langs bunden). Hvis du klikker på dem, så udvides de til et undervindue — en visning — indenfor hovedvinduet. Hvis du klikker på værktøjsknappen en gang til, så forsvinder visningen igen.

Note

For at få et undervindue til af forsvinde kan du også klikke på knappen x øverst til højre i undervinduet; dette fjerner dog også den tilhørende værktøjsknap fra vindueskanten, i hvert fald i KDevelop 4.2.x; og den skal du bruge for at få undervinduet frem igen. Se herunder, hvordan du får knappen tilbage til vindueskanten på samme måde, som du får enhver anden værktøjsknap placeret der. Denne opførsel er rapporteret som bug 270018


Billedet ovenfor viser et eksempel på værktøjer placeret i den venstre og højre kant. I billeder er værktøjet Klasser åbent til venstre og værktøjet Tekststumper til højre sammen med en editor til en kildefil i midten. For det meste vil du nok kun have editoren åben og måske værktøjet Klasser eller Kodebrowser til venstre. Andre værktøjer vil sikkert kun være åbne midlertidigt mens du bruger dem, sådan at der bliver mere plads til editoren.

Når du kører KDevelop første gang, så skulle du allerede have værktøjsknappen Projekter. Klik på den: det vil åbne et undervindue, som forneden viser de projekter, som du har føjet til sessionen og en visning af mapperne i dit projekt for oven.

Der er mange andre værktøjer, som du kan bruge i KDevelop, men deres knapper er ikke alle til stede i vindueskanten fra begyndelsen. For at føje flere til vælger du menuen Vindue -> Tilføj værktøjsvisning.... Her er nogle, som du sikkert vil få glæde af:

  • Klasser: En fuldstændig liste af alle klasser, som bliver defineret i en af din sessions projekter med alle deres medlemsfunktioner og -variable. Klik på et medlem for at åbne kildeeditorens vindue med markøren på det sted, hvor det emne, du klikkede på er defineret.
  • Dokumenter: Viser de filer, som du for nylig har arbejdet med ordnet efter type (fx kildefil, patchfil eller rent tekstdokument).
  • Kodebrowser: Dette værktøj viser ting, der er relaterede til det, som du aktuelt arbejder med afhængigt af, hvor markøren er placeret. Hvis den fx er på en #include linje, så vises information om den fil der bliver inkluderet, så som hvilke klasser, der erklæres i filen; hvis du er på en tom linje på filniveau, så vises de klasser og funktioner, som erklæres eller defineres i den aktuelle fil (alle vises som links: klikker du på dem, så bringes du til det sted i filen, hvor erklæringen eller definitionen er); hvis du er i en funktionsdefinition, så vises der, hvor funktionen erklæres og hvor den bruges.
  • Filsystem: Giver dig en trævisning af filsystemet.
  • Dokumentation: Lader dig søge efter man-sider og andre hjælpedokumenter.
  • Tekststumper: Her kan du gemme tekststumper, som du ofte har brug for og ikke har lyst til at skulle skrive hver gang. I projektet, som vises i billedet ovenfor er der ofte brug for kode som dette:
    for (typename Triangulation<dim>::active_cell_iterator cell = triangulation.begin_active(); cell != triangulation.end(); ++cell)
    Det er besværligt udtryk, med det ser næsten ud på samme måde, hver gang du har brug for sådan en løkke. Det gør udtrykket til en god kandidat til en tekststump.
  • Konsole: Åbner et vindue med en kommandolinje i KDevelops hovedvindue til de situationer, hvor du blot skal have udført enkelte kommandoer (fx hvis du skal køre ./configure).

En fuldstændig liste med værktøjer og visninger findes her.

For mange programmører er det vigtigst at have god plads i lodret retning. For at opnå dette kan du arrangere dine værktøjsvisninger i venstre og højre vindueskant. For at flytte et værktøj højreklikker du på dets knap og vælger en ny position til det.

Udforsk kildekoden

Lokal information

KDevelop forstår kildekode og er derfor virkelig god til at at give dig information om variable eller funktioner, som kan optræde i dit program. Her er for eksempel et øjebliksbillede af arbejdet med et stump kode, hvor musen svæver over symbolet cell i linje 1316 (hvis du foretrækker at bruge tastaturet, så kan du opnå det samme ved at holde Alt-tasten nede et stykke tid):

nKDevelop viser dig et værktøjstip, som inkluderer variablens type (her DoFHandler<dim&rt;active_cell_iterator), hvor denne variabel er erklæret (hvad den er indeholdt i — her den omgivende funktion get_maximal_velocity, eftersom det er en lokal variabel, ikke en funktion, klasse eller navnerum) og hvor den er erklæret (i linje 1314, blot nogle få linjer oppe i koden).

I den aktuelle sammenhæng har symbolet, som musen svæver over ingen tilknyttet dokumentation. Hvis musen havde svævet over symbolet get_this_mpi_process i linje 1318 i dette eksempel, så ville du have set følgende:

Her har KDevelop henvist til erklæringen i en anden fil (utilities.h, som endda hører til et andet projekt i den samme session) og vist den doxygen-agtige kommentar, som er knyttet til erklæringen der.

Hvad der gør disse værktøjstips endnu nyttigere er, at de er dynamiske: Du kan klikke på linket Container for at få information om den kontekst, som variablen er erklæret i (fx om navnerummet System, så som hvor det bliver erklæret, defineret, brugt eller hvad dets dokumentation er) og du kan klikke på det blå link for at få flyttet tekstmarkøren hen til symbolets erklæring (i eksemplet til linje 289 i utilities) eller få en liste over steder, hvor dette symbol bruges i den aktuelle fil eller overalt i projekterne, som hører dit den aktuelle session. Det sidste er ofte nyttigt, hvis du for eksempel vil undersøge, hvordan en given funktion bruges i en større kodebase.

Note

Informationen i værktøjstippet er flygtig — den er afhængig af, at du holder Alt-tasten nede eller holder musen svævende. Hvis du ønsker et mere permanent visning, så åbn værktøjsvisningen Kodebrowser i et af undervinduerne. For eksempel er markøren her på samme funktion som i eksemplet ovenfor og værktøjsvisningen til venstre giver den samme slags information som værktøjstippet før:
Moving the cursor around on the right changes the information presented on the left. What's more, clicking on the "Lock current view" button at the top right allows you to lock this information, making it independent of the cursor movement while you explore the information presented there.


Note

This sort of context information is available in many other places in KDevelop, not just in the source editor. For example, holding down the ALT key in a completion list (e.g. when doing a quick-open) also yields context information about the current symbol.


File scope information

The next level up is to obtain information about the entire source file you are currently working on. To this end, position the cursor at file scope in the current file and look at the what the "Code browser" tool view shows:

Here, it shows a list of namespaces, classes and functions declared or defined in the current file, giving you an overview of what's happening in this file and a means to jump directly to any of these declarations or definitions without scrolling up and down in the file or searching for a particular symbol.

Note

The information shown for file scope is the same as presented in the "Outline" mode discussed below for navigating source code; the difference is that outline mode is only a temporary tooltip.


Project and session scope information

There are many ways to obtain information about an entire project (or, in fact, about all projects in a session). This sort of information is typically provided through various tool views. For example, the "Classes" tool view provides a tree structure of all classes and surrounding namespaces for all projects in a session, together with the member functions and variables of each of these classes:

Hovering over an entry provides again information about the symbol, its location of declaration and definition, and its uses. Double-clicking on an entry in this tree view opens an editor window at the location where the symbol is declared or defined.

But there are other ways of looking at global information. For example, the "Documents" tool provides a view of a project in terms of the kinds of files or other documents this project is comprised of:

Navigating in source code

In the previous section, we have discussed exploring source code, i.e. getting information about symbols, files and projects. The next step is then to jump around your source base, i.e. to navigate in it. There are again various levels at which this is possible: local, within a file, and within a project.

Note

Many of the ways to navigate through code are accessible from the Navigate menu in the KDevelop main window.


Local navigation

KDevelop is much more than an editor, but it is also a source editor. As such, you can of course move the cursor up, down, left or right in a source file. You can also use the Page Up and Page Down buttons, and all the other commands you are used from any useful editor.

File scope navigation and outline mode

At the file scope, KDevelop offers many possible ways to navigate through source code. This includes the following ways you can jump through an individual file:

  • Outline: You can get an outline of what's in the current file in at least three different ways:
    • Clicking into the "Outline" textbox at the top right of the main window, or hitting "Alt+Ctrl+N" opens a drop-down menu that lists all function and class declarations:
      You can then just select which one to jump to, or — if there are a lot — start typing any text that may appear in the names shown; in that case, as you keep typing, the list becomes smaller and smaller as names are removed that don't match the text already typed until you are ready to select one of the choices.
    • Positioning the cursor at file scope (i.e. outside any function or class declarations or definitions) and having the "Code browser" tool open:
      This also provides you an outline of what is happening in the current file, and allows you to select where you want to jump to.
    • Hovering the mouse over the tab for one of the open files also yields an outline of the file in that tab.
  • Source files are organized as a list of function declarations or definitions. Hitting "Alt+Ctrl+PgUp" and "Alt+Ctrl+PgDown" jumps to the previous or next function definition in this file.

Project and session scope navigation: Semantic navigation

Under Construction

This is a new page, currently under construction!


Reference the ways seen in "Exploring source code".

Quick open X

Jump to Declaration/Definition, switch def/decl

next/prev use

context stack

Tilstande og arbejdssæt

Hvis du er kommet så langt, så se lidt på øverste højre hjørne af KDevelops hovedvindue. Som det ses i billedet finder du her de tre tilstande, som KDevelop kan være i: Kode (den tilstand, som vi diskuterer i dette kapitel om arbejdet med kildekoden), Fejlsøgning (se Fejlsøgning af programmer) og Eftersyn (se Arbejdet med versionskontrolsystemer).

Hver tilstand har sit eget sæt af værktøjer i vindueskanten og sit eget arbejdssæt af aktuelt åbne filer og dokumenter. Desuden er hvert arbejdssæt knyttet til en session, svarende til den sammenhæng, der vises i billedet ovenfor. Bemærk, at filerne i arbejdssættet hører til samme session med kan komme fra forskellige projekter, som hører til samme session.

Hvis du åbner KDevelop for første gang, så er arbejdssættet tomt — der er ingen åbne filer. Men idet du åbner filer for redigering (eller fejlsøgning eller eftersyn i de andre tilstande), så vokser dit arbejdssæt. Som du kan se på billedet herunder, så viser et symbol i fanebladet at arbejdssættet ikke er tomt. Bemærk, at nå du lukker KDevelop, gemmes arbejdssættet og det genetableres, når du genstarter programmet, dvs. at du får det samme sæt af åbne filer.

Hvis du lader musen svæve over symbolet for et arbejdssæt, så dukker der et værktøjstip frem, som viser dig hvilke filer, der aktuelt er åbne i dette arbejdssæt (her filerne step-32.cc og step-1.cc). Klikker du på det røde minustegn, så lukkes fanebladet med den tilsvarende fil. Klikker du på Luk, så lukkes hele arbejdssættet på en gang (dvs. alle åbne filer lukkes). Pointen med at lukke et arbejdssæt er, at det ikke bare lukker alle filer men faktisk gemmer det og åbner et nyt, endnu tomt sæt. Det kan du se her:

Bemærk de to symboler til venstre for det tre tilstandsfaneblade (hjertet og det uidentificérbare symbol til venstre for det). Hver af disse symboler repræsenterer et gemt arbejdssæt. Hvis du lader musen svæve over hjertesymbolet, så ser du noget i retning af dette:

Det viser dig, at det tilsvarende arbejdssæt indeholder to filer og deres tilsvarende projektnavne: Makefile og changes.h. Klikker du på Indlæs, så gemmes og lukkes det aktuelle arbejdssæt (i eksemplet her har det filerne tria.h og tria.cc åbne) og åbner i stedet det valgte arbejdssæt. Du kan også slette et arbejdssæt permanent.

Nogle nyttige tastaturgenveje

KDevelops editor bruger standard-tastaturgenveje til alle almindelige redigeringsoperationer. Den understøtter dog også et antal mere avancerede operationer, når man redigerer kode; nogle af disse er bundet til forskellige tastekombinationer. De følgende er ofte nyttige:

Hop rundt i kildekode
Ctrl+Alt+O Åbn fil hurtigt: skriv en del af et filnavn og vælg blandt alle de filer i den aktuelle sessions projektmapper, som matcher strengen; filen bliver så åbnet
Ctrl+Alt+C Åbn klasse hurtigt: skriv en del af navnet på en klasse og vælg imellem de klasser der matcher; markøren vil hoppe til det sted, hvor klassen deklareres
Ctrl+Alt+M Åbn funktion hurtigt: skriv en del af navnet på en (medlems)funktion og vælg imellem de funktioner der matcher. Bemærk, at listen både viser deklarationer og definitioner. Markøren vil hoppe til det valgte sted
Ctrl+Alt+Q Åbn hurtigt: skriv hvad som helst (filnavn, klassenavn, funktionsnavn) og få en liste over alt det, der matcher til at vælge fra
Ctrl+Alt+N Oversigt: Vis en liste over alt, hvad der sker i denne fil, dvs. klassedeklarationer og funktionsdefinitioner
Ctrl+, Hop til definitionen af en funktion, hvis markøren i øjeblikket er på en funktionsdeklaration
Ctrl+. Hop til en deklaration af en funktion eller variabel hvis markøren i øjeblikket er i en funktionsdefinition
Ctrl+Alt+PageDown Hop til den næste funktion
Ctrl+Alt+PageUp Hop til den forrige funktion
Ctrl+G Gå til linje
Søg og erstat
Ctrl+F Find
F3 Find næste
Ctrl+R Erstat
Ctrl+Alt+F Find og erstat i flere filer
Andre ting
Ctrl+_ Fold et lokalt niveau sammen: skjul denne blok, for eksempel hvis du ønsker at fokusere på det overordnede billede i en funktion
Ctrl++ Udfold et lokalt niveau: Omgør sammenfoldning
Ctrl+D Udkommentér den markerede tekst eller den aktuelle linje
Ctrl+Shift+D Fjern udkommentering af den markerede tekst eller den aktuelle linje
Alt+Shift+D Dokumentér erklæring. Hvis markøren er på deklarationen af en funktion eller klasse, så laves der en doxygen-agtig kommentar med alle funktionens parametre, returværdi osv.
Ctrl+T Byt det aktuelle og det forrige tegn
Ctrl+K Slet den aktuelle linje (bemærk: dette er ikke emacs' "slet herfra og til linjens afslutning")