
      Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at
    
          http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.

This file contains the text displayed by the 'help' command in fdb.



It is divided into "topics". For example, when an fdb user types

'help break', the [break] topic below is displayed.



The first and last lines of each topic should be blank.

They don't get displayed in fdb; they are here only

to make this file more easily readable.



Help text should be formatted to not wrap

when displayed on an 80-character-wide console.

The following line is 80 characters wide.



--------------------------------------------------------------------------------



[?]



Udefineret kommando. Skriv 'help' for at se en liste over alle fdb-kommandoer.



[break]



Indsæt pausepunkt ved angivne linje eller funktion.

Eksempler:

  break 87

    Indsætter et pausepunkt på linje 87 i den nuværende fil.

  break myapp.mxml:56

    Indsætter et pausepunkt på linje 56 i myapp.mxml.

  break #3:29

    Indsætter et pausepunkt på linje 29 i fil nr. 3.

  break doThis

    Indsætter et pausepunkt ved funktionen doThis() i den nuværende fil.

  break myapp.mxml:doThat

    Indsætter et pausepunkt ved funktionen doThat() i myapp.mxml.

  break #3:doOther

    Indsætter et pausepunkt ved funktionen doOther() i fil nr. 3.

  break

   Indsætter et pausepunkt ved den nuværende eksekveringsadresse i den 

   nuværende stakramme. Det kan være nyttigt hvis der kræves pauser ved 

   returnering til en stakramme.

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Hvis du vil se funktionernes navne, skal du skrive 'info functions'.

Forkortede filnavne og funktionsnavne accepteres hvis de er entydige.

Hvis der angives linjenummer, indsættes pausepunktet i starten af linjen.

Hvis der angives funktion, indsættes pausepunktet inden funktionens kode.

Du kan se mere om kontrol over pausepunkter ved at skrive 'commands' eller 

'condition'.



[bt]



Tilbagesporing af stakken.



[catch]



Stands når der opstår en undtagelse.  Dette gælder kun for undtagelser der 

bliver fanget  dvs. undtagelser der bliver håndteret af en "catch"-blok.  

Undtagelser der ikke fanges, standser altid i fejlfinding.



Du kan slette et opfangningspunkt med kommandoen "delete".



Eksempler:

  catch *

    Standser når der opstår en vilkårlig undtagelse.

  catch ReferenceError

    Standser når der opstår en ReferenceError, uanset om den fanges eller ej.



[cf]



Vis navn og nummer på den nuværende fil, eller skift fil.

Eksempler:

  cf

    Viser navn og nummer på den nuværende fil.

  cf myapp.mxml

    Skifter til myapp.mxml som nuværende fil.

  cf #29

    Skifter til fil nr. 29 som nuværende fil.

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Forkortede filnavne accepteres hvis de er entydige.

Når du viser en fil med 'list', bliver den også valgt som nuværende fil.



[clear]



Slet pausepunkt ved angivne linje eller funktion.

Eksempler:

  clear 87

    Sletter pausepunktet på linje 87 i den nuværende fil.

  clear myapp.mxml:56

    Sletter pausepunktet på linje 56 i myapp.mxml.

  clear #3:29

    Sletter pausepunktet på linje 29 i fil nr. 3.

  clear doThis

    Sletter pausepunktet ved funktionen doThis() i den nuværende fil.

  clear myapp.mxml:doThat

    Sletter pausepunktet ved funktionen doThat() i myapp.mxml.

  clear #3:doOther

    Sletter pausepunktet ved funktionen doOther() i fil nr. 3.

  clear

    Sletter pausepunktet på den nuværende linje i den nuværende fil. 

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Hvis du vil se funktionernes navne, skal du skrive 'info functions'.

Forkortede filnavne og funktionsnavne accepteres hvis de er entydige.

Hvis der angives et linjenummer, slettes alle pausepunkter på den linje.

Hvis der angives en funktion, slettes pausepunktet inden funktionen.



[continue]



Fortsæt afvikling efter at have stoppet ved pausepunkt.

Denne kommando kan ikke bruges sammen med argumenter.



[condition]





Angiv at pausepunkt nummer N kun skal aktiveres, hvis COND overholdes.

Bruges således: 'condition N COND' hvor N er et heltal og COND er det udtryk 

der skal holdes op imod, når pausepunktet N nås.



[commands]



Angiv de kommandoer der skal afvikles når et pausepunkt nås.

Skriv pausepunktets nummer som argument efter 'commands'.

Hvis der ikke angives et argument, vælges det senest angivne pausepunkt.

Selve kommandoerne skal skrives fra den efterfølgende linje.

Du angiver slutningen ved at skrive "end" på den pågældende linje.

Hvis du skriver "silent" på første linje, er pausepunktet diskret; der skrives 

altså ikke noget output når pausepunktet nås  ud over det som kommandoerne skriver.

Eksempel:

  (fdb) commands

  Indtast kommandoer der skal afvikles når pausepunkt 1 nås, én pr. linje.

  Afslut med en linje der kun indeholder 'end'.

  >w

  >end



[delete]



Slet et eller flere pausepunkter.

Eksempler:

  delete

    Sletter alle pausepunkter.

  delete 2 5

    Sletter pausepunkterne nr. 2 og nr. 5.

Hvis du vil se pausepunkternes numre, skal du skrive 'info breakpoints'.



[directory]



Rediger listen over mapper som fdv søger efter kildefiler i.



Eksempler:



  directory

    Gendanner listens standardindstillinger, dvs. mappen hvori kildefilen blev 

    kompileret til objektkode efterfulgt af den nuværende arbejdsmappe.



  directory C:\MySource        (Windows)

  directory /MySource          (Mac)

    Føjer den angivne mappe til begyndelsen af listen over mapper, hvori der 

    søges efter kilder.  Når der fx søges efter kilden til klassen 

    mypackage.MyClass, søges der i fejlfinding både efter 

    C:\MySource\mypackage\MyClass.as og C:\MySource\MyClass.as.



  directory C:\Dir1;C:\Dir2    (Windows  brug ';' som skilletegn)

  directory /Dir1:/Dir2        (Mac  brug ':' som skilletegn)

    Føjer flere mapper til begyndelsen af listen over mapper, hvori der søges 

    efter kilder.



Du kan få vist listen i sin nuværende form ved at skrive 'show directories'.



[disable]



Deaktiver et eller flere pausepunkter eller auto-display-udtryk.

Eksempler:

  disable

  disable breakpoints

    Deaktiverer alle pausepunkter.

  disable 2 5

  disable breakpoints 2 5

    Deaktiverer pausepunkterne nr. 2 og nr. 5.

  disable display

    Deaktiverer alle auto-display-udtryk.

  disable display 1 3

    Deaktiverer auto-display-udtryk nr. 1 og nr. 3.

Hvis du vil se pausepunkternes numre, skal du skrive 'info breakpoints'.

Hvis du vil se auto-display-udtrykkenes numre, skal du skrive 'info display'.



[disassemble]



(Kun til ActionScript 2; understøttes ikke ved fejlfinding i ActionScript 3)



Opdel den angivne del af kildekoden.

Som standard vælges den nuværende linje.

Der understøttes samme argumenter som under listekommandoen

Eksempler:

  disassemble 87

    Opdeler linje 87 i den nuværende fil.

  disassemble 87 102

    Opdeler linje 87  102 i den nuværende fil.

  disassemble doThis

      Opdeler funktionen doThis() i den nuværende fil.

Ud over at bruge enkle linjenumre som vist ovenfor, kan du udpege linjer på 

andre måder:

   myapp.mxml

      Linje 1 i myapp.mxml.

   myapp.mxml:doThat

      Den første linje af funktionen doThat() i myapp.mxml.

   myapp.mxml:56

      Linje 56 i myapp.mxml.

   #3

      Linje 1 i fil nr. 3.

   #3:doOther

      Linjen i fil nr. 3 hvor funktionen doOther() begynder.

   #3:29

      Linje 29 i fil nr. 3.



[display]



Føj et udtryk til listen over auto-display-udtryk.

Eksempel:

  display employee.name

    Føj 'employee.name' til listen over auto-display-udtryk.

    Hver gang fdb stopper, vises værdien for employee.name.

Argumentet for denne kommando minder om kommandoen for 'print'.

Hvis du vil se en liste over auto-display-udtrykkene og deres numre, skal du 

skrive 'info display'.



[down]



Vælg og skriv stakrammen der kaldes af denne.

Ved efterfølgende 'info' argumenter og 'info locals' kommandoer vises de lokale 

variable og argumenterne for den valgte ramme.

Læs mere under 'up' og 'frame' 



[enable]



Aktiver et eller flere pausepunkter eller auto-display-udtryk.

Eksempler:

  enable

  enable breakpoints

    Aktiverer alle pausepunkter.

  enable 2 5

  enable breakpoints 2 5

    Aktiverer pausepunkterne nr. 2 og nr. 5.

  enable display

    Aktiverer alle auto-display-udtryk.

  enable display 1 3

    Aktiverer auto-display-udtryk nr. 1 og nr. 3.

Hvis du vil se pausepunkternes numre, skal du skrive 'info breakpoints'.

Hvis du vil se auto-display-udtrykkenes numre, skal du skrive 'info display'.



[file]



Vælg en applikation at køre fejlfinding i uden at starte den.

Eksempler:

  file http://www.mysite.com/myapp.mxml

    Vælg en MXML-applikation at køre fejlfinding i.

  file myapp.swf

    Angiv en lokal SWF-fil i den nuværende mappe at køre fejlfinding i.

    I dette tilfælde skal myapp.swd (filen der indeholder 

    fejlfindingsoplysninger) også ligge i den nuværende mappe.

Kommandoen får ikke applikationen til at starte; du kan starte fejlfindingen af 

applikationen ved at bruge kommandoen 'run' uden argument.

I stedet for at skrive 'file <filnavn>' efterfulgt af 'run', kan du angive 

hvilken applikation der skal køres fejlfinding i som et argument til 'run':

  run http://mysite.com/myapp.mxml

  run myapp.swf

Du kan også angive hvilken applikation der skal køres fejlfinding i, som et 

argument i kommandolinjen når du starter fdb:

  fdb http://www.mysite.com/myapp.mxml

  fdb myapp.swf

I dette tilfælde behøver du ikke at bruge 'file' eller 'run'.

Hvis du bruger 'run' uden at angive en applikation at køre fejlfinding i, 

venter fdb på at en applikation etablerer forbindelse.



[finish]



Eksekver indtil den valgte funktion returnerer.

Denne kommando kan ikke bruges sammen med argumenter.



[frame]



Vælg og skriv en bestemt stakramme.

Denne kommando kan evt. bruges med et argument, et rammenummer.

Hvis der ikke angives noget argument, returneres der som standard til den 

nuværende topramme (dvs. ramme 0).

Eksempler:

  frame 4

  frame

Ved efterfølgende 'info' argumenter og 'info locals' kommandoer vises de lokale 

variable og argumenterne for den valgte ramme.

Læs mere under 'down' og 'bt' 



[handle]



Angiv hvordan fdb skal håndtere fejl i Flash Player.

Eksempler:

  handle recursion_limit stop

    Vis en meddelelse i fdb, og stop som om et pausepunkt er nået når der 

    opstår en recursion_limit-fejl.

  handle all print nostop

    Vis en meddelelse i fdb når der opstår en fejl, men stop ikke.

Første argument er et navn på fejlen eller 'all'.

Yderligere argumenter er handlinger der vedrører fejlen.

Hvis du vil se navne på fejl, skal du skrive 'info handle'.

Mulige handlinger er print/noprint og stop/nostop.

Med 'print' skrives der en meddelelse hvis fejlen opstår.

Med 'stop' åbnes fejlfinding igen hvis fejlen opstår. Medfører 'print'.



[help]



Har du ikke brugt fdb før? Du kan få grundlæggende oplysninger ved at skrive 

'tutorial'.

Liste over kommandoer i fdb:

bt (bt)             Skriv tilbagesporing af alle stakrammer

break (b)           Indsæt pausepunkt ved angivne linje eller funktion

catch (ca)          Stands når der opstår en undtagelse

cf (cf)             Vis navn og nummer på den nuværende fil

clear (cl)          Slet pausepunkt ved angivne linje eller funktion

condition (cond)    Anvend/fjern betinget udtryk fra et pausepunkt

continue (c)        Fortsæt afvikling efter at have stoppet ved pausepunkt

commands (com)      Angiver de kommandoer der skal afvikles når et pausepunkt 

                    nås

delete (d)          Slet pausepunkter eller auto-display-udtryk

directory (dir)     Føj en mappe til søgningen efter kildefiler

disable (disab)     Deaktiver pausepunkter eller auto-display-udtryk

disassemble (disas)       Opdel kildelinjer eller funktioner

display (disp)      Tilføj et auto-display-udtryk

enable (e)          Aktiver pausepunkter eller auto-display-udtryk

file (fil)          Vælg en applikation at køre fejlfinding i.

finish (f)          Eksekver indtil den valgte funktion returnerer

handle (han)        Angiv hvordan fejl skal håndteres

help (h)            Vis hjælp til fdb-kommandoer

home (ho)           Angiv listeplacering der hvor afviklingen standsede

info (i)            Vis oplysninger om programmet der undersøges for fejl

kill (k)            Afbryd afviklingen af programmet der undersøges for fejl

list (l)            Vis liste for den angivne funktion eller linje

next (n)            Spring i program

print (p)           Skriv værdien af variablen EXP

pwd (pw)            Skriv arbejdsmappen

quit (q)            Afslut fdb

run (r)             Start det program der blev kørt fejlfinding i

set (se)            Angiv værdien for en variabel

source (so)         Læs fdb-kommandoer fra en fil

step (s)            Spring i program indtil der nås en anden kildelinje

tutorial (t)        Vis en vejledning om at bruge fdb

undisplay (u)       Fjern et auto-display-udtryk

viewswf (v)         Angiv eller fjern filter for filvisning baseret på swf

watch (wa)          Føj et overvågningspunkt til en given variabel

what (wh)           Viser konteksten for en variabel

where (w)           Samme som bt

Skriv 'help' efterfulgt af navnet på en kommando for at få vist alle 

oplysninger.



[home]



Angiv listeplaceringen dér hvor afviklingen standsede.



[info]



Generisk kommando til at vise oplysninger om det program der findes fejl i.

Liste over underkommandoer til info:

info arguments (i a)    Argumentvariable for nuværende stakramme

info breakpoints (i b)  Status for brugerdefinerbare pausepunkter

info display (i d)      Vis liste over alle auto-display-udtryk

info files (i f)        Navne på mål og filer der findes fejl i

info functions (i fu)   Navne på alle funktioner

info handle (i h)       Angiver hvordan fejl håndteres

info locals (i l)       Lokale variable for nuværende stakramme

info scopechain (i sc)  Virkefeltet (scope chain) for nuværende stakramme

info sources (i so)     Kildefiler i programmet

info stack (i s)        Tilbagesporing af stakken

info swfs (i sw)        Liste over swf-filer i denne session

info targets(i t)       Angiver hvilken applikation der søges efter fejl i

info variables (i v)    Navne på alle globale og statiske variable

Skriv 'help info' efterfulgt af navnet på en info-underkommando for at få vist 

alle oplysninger.



[info arguments]



Vis argumenter for nuværende stakramme.



[info breakpoints]



Vis status for alle pausepunkter og overvågningspunkter.

I kolonnen Type står der enten:

   breakpoint   - almindeligt pausepunkt

   watchpoint   - overvågningspunkt

I kolonnen Disp står der 'keep', 'del' eller 'dis' alt efter hvad der skal ske 

med pausepunktet, når det nås. Hvis der står 'dis', deaktiveres pausepunktet. 

Står der 'del', bliver det slettet.  

I kolonnerne 'Address' og 'What' angives hhv. adressen og fil-/linjenummeret. 



[info display]



Vis liste over alle auto-display-udtryk og deres numre.



[info files]



Vis navne og numre på filerne i det program der søges efter fejl i, inklusive 

kildefiler, framework-filer og automatisk genererede filer.

Eksempler:

  info files

    Viser en liste over alle filer, i alfabetisk rækkefølge efter kategori

  info files my

  info files my*

    Viser en liste over alle de filer hvis navn starter med "my", i alfabetisk 

    rækkefølge.

  info files *.as

    Viser en liste over alle de filer hvis navn slutter med ".as", i alfabetisk 

    rækkefølge.

  info files *foo*

    Viser en liste over alle de filer hvis navn indeholder "foo", i alfabetisk 

    rækkefølge. 

Filerne vises i formatet navn#N, hvor N er filens nummer.

I mange kommandoer kan du bruge #N i stedet for filnavnet.



[info functions]



Vis navne på funktioner.

Eksempler:

  info functions .

    Vis alle funktioner i den nuværende fil.

  info functions myapp.mxml

    Vis alle funktioner i myapp.mxml.

  info functions #3

    Vis alle funktioner i fil nr. 3.

  info functions

    Viser alle funktioner i alle filer.

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Forkortede filnavne accepteres hvis de er entydige.



[info handle]



Hvad fdb gør når der opstår en fejl i Flash Player.

Eksempler:

  info handle

    Vis hvordan fdb håndterer alle fejl.

  info handle recursion_limit

    Vis hvordan fdb håndterer en recursion_limit-fejl.



[info locals]



Vis lokale variable for nuværende stakramme.



[info scopechain]



Vis virkefelt for nuværende stakramme.  Virkefeltet er listen over objekter der 

søges i når Flash Player forsøger at fortolke et symbolnavn.



[info sources]



Vis navne og numre på kildefilerne i det program der søges efter fejl i. 

Framework-filer og automatisk genererede filer er ikke inkluderet.

Filerne vises i formatet navn#N, hvor N er filens nummer.

I mange kommandoer kan du bruge #N i stedet for filnavnet.



[info stack]



Tilbagesporing af stakken.



[info swfs]



Vis swf-filer der kendes i fejlfindings-sessionen.  Kig under kommandoen 

'viewswf' hvis du vil have oplysninger om hvordan fillisten kan filtreres efter 

swf-filnavn. 



[info targets]



Vis URL-adressen (http: eller file:) til den applikation der søges efter fejl i.



[info variables]



Vis navne og værdier på alle globale og statiske variable.



[info ?]



Udefineret info-kommando. Du kan få hjælp ved at skrive 'help info'



[kill]



Afbryd afviklingen af programmet der undersøges for fejl.

Denne kommando kan ikke bruges sammen med argumenter.



[list]



Vis en liste over linjer med kode i en kildefil.

Eksempler:

  list

    Viser yderligere ti linjer i den nuværende fil, efter eller omkring den 

    tidligere viste linje.

  list -

    Viser de ti linjer i den nuværende fil, der står inden de tidligere viste.

  list 87

    Viser ti linjer omkring linje 87 i den nuværende fil.

  list 87 102

    Viser linje 87  102 i den nuværende fil.

Ud over at bruge enkle linjenumre som vist ovenfor, kan du udpege linjer på syv 

andre måder:

  doThis

      Den første linje af funktionen doThis() i den nuværende fil.

   myapp.mxml

      Linje 1 i myapp.mxml.

   myapp.mxml:doThat

      Den første linje af funktionen doThat() i myapp.mxml.

   myapp.mxml:56

      Linje 56 i myapp.mxml.

   #3

      Linje 1 i fil nr. 3.

   #3:doOther

      Linjen i fil nr. 3 hvor funktionen doOther() begynder.

   #3:29

      Linje 29 i fil nr. 3.

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Hvis du vil se funktionernes navne, skal du skrive 'info functions'.

Forkortede filnavne og funktionsnavne accepteres hvis de er entydige.

Når du får en fil vist, bliver den også valgt som den nuværende fil. (Læs mere 

under kommandoen 'cf').



[next]



Spring i programmet, gennem kald fra underrutiner.

  next

    Spring en enkelt gang.

  next 3

    Spring 3 gange eller indtil programmet stopper af en anden grund.

Fungerer som kommandoen 'step' så længe der ikke sker kald fra underrutiner. 

Hvis der gør, behandles kaldet som én instruktion.



[print]



Skriv værdien af variablen eller udtrykket.

Eksempler:

  print i

    Skriv værdien for 'i'.

  print employee.name

    Skriv værdien for 'employee.name'.

  print employee

    Skriv værdien for objektet 'employee'.

    Der skrives muligvis noget i stil med [Object 10378].

  print employee.

    Skriv værdierne for alle egenskaber for objektet 'employee'.

  print *employee

    Skriv værdierne for alle egenskaber for objektet 'employee'.

    Præfikset * fungerer på samme måde som suffikset '.' (punktum).

  print #10378.

    Skriv værdierne for alle egenskaber for objekt nr. 10378.

Der kan bruges variable fra det leksikale miljø for den valgte stakramme, plus 

de variable hvis virkefelt er globalt eller en hel fil.



[pwd]



Skriv den nuværende arbejdsmappe.

Det er den mappe som fdb blev kørt fra; den kan ikke ændres fra fdb. Argumentet 

for 'run' og 'source' kan angives i forhold til denne mappe.

Denne kommando kan ikke bruges sammen med argumenter.



[quit]



Afslut fdb.

Denne kommando kan ikke bruges sammen med argumenter.



[run]



Start en fejlfindings-session.

Eksempler:

  run http://www.mysite.com/myapp.mxml

    Kører den angivne MXML-applikation.

  run myapp.swf

  run mydir\myapp.swf

  run c:\mydir\myapp.swf

    Kører den lokale SWF-fil myapp.swf som kan angives

	enten i forhold til den nuværende mappe (læs mere under kommandoen 

        'pwd')

	eller med en komplet sti. I disse tilfælde skal myapp.swd (filen der 

indeholder fejlfindingsoplysninger) også ligge i den samme mappe som myapp.swf.

  run

    Kør applikationen der tidligere blev angivet med kommandoen 'file'.

    Hvis der ikke er angivet nogen applikation, venter fdb indtil der er en der 

    har etableret forbindelse. Hvis det ikke sker, opstår der timeout.

Applikationen kan startes i et browser- eller Flash Player-vindue med 'run'.

Så snart applikationen startes, åbnes fdb så du kan angive pausepunkter osv.



På Macintosh-computere understøttes kommandoen 'run' kun uden argumenter.  

Du skal derefter manuelt starte Flash Player.



[set]



Angiv værdien for en variabel eller en simpel variabel.

Simple variable er variable der kun findes indenfor fdb; de er ikke en del af 

dit program.

Simple variable har fortegnet '$' og kan have ethvert navn der ikke er benyttes 

med eksisterende variable.  Eksempel: $myVar.  Simple variable bruges også til 

at styre diverse dele af fdb.  



Følgende simple variable bruges af fdb.

$listsize          - antallet af kildelinjer der skal vises med 'list'

$columnwrap        - nummeret på den kolonne som outputtet skal ombrydes i

$infostackshowthis - hvis værdien er 0, vises 'this' ikke i tilbagesporing af 

                     stakken

$invokegetters     - hvis værdien er 0, forhindres fdb i at udløse 

                     hentefunktioner

$bpnum             - nummeret på det senest definerede pausepunkt

$displayattributes - hvis værdien er 1, viser 'print var.' alle attributter for 

                     'var' (fx privat, statisk etc.)



Eksempler:

  set i = 3

    Definerer variablen 'i' som tallet 3.

  set employee.name = "Susan"

    Definerer variablen 'employee.name' som strengen "Susan".

  set $myVar = 20

    Definerer den simple variabel '$myVar' som tallet 20



[show]



Generisk kommando til at vise statusoplysninger om fdb.

Liste over underkommandoer til 'show':

show break (sh b)       Sted og begrundelse for standsning af afvikling

show directories (sh d) Mapper hvori der skal søges efter kildefiler

show files (sh f)       Målfiler og stier

show functions (sh fu)  Tilknytningsoplysninger for funktionslinjen 

show locations (sh l)   Placering af pausepunkter

show memory (sh m)      Nuværende hukommelsesforbrug

show net (sh n)         Meddelelsesstatistik for afspiller 

show properties (sh p)  Værdier for egenskaber

show uri (sh u)         Afspillerens URI for denne session 

show variable (sh v)    Henter selve variablen

Skriv 'help show' efterfulgt af navnet på en show-underkommando for at få vist 

alle oplysninger.



[show break]



Vis hvor i swf-filen programmet standsede



[show directories]



Vis den nuværende sti til søgning efter kildefiler.



[show files]



Vis stier og filnavne for alle målfilerne



[show functions]



Vis oplysninger om sammenknytning af funktioner og linjenumre.

Eksempler:

  show functions .

    Viser tilknytningsoplysninger for alle funktioner i den nuværende fil.

  show functions myapp.mxml

    Viser tilknytningsoplysninger for alle funktioner i myapp.mxml.

  show functions #3

    Viser tilknytningsoplysninger for alle funktioner i fil nr. 3.

  show functions

    Viser tilknytningsoplysninger for alle funktioner i alle filer.

Hvis du vil have vist filernes navne og numre, skal du skrive 'info sources' 

eller 'info files'.

Forkortede filnavne accepteres hvis de er entydige.



[show locations]



Viser en liste over de placeringer der et angivet for hvert pausepunkt



[show memory]



Vis hukommelsesstatistik for Java VM.



[show net]



Vis oplysninger om meddelelser der er blevet sendt til eller modtaget fra Flash 

Player.



[show properties]



Viser en liste over de simple variable der bruges af fejlfinding 



[show uri]



Vis den URI som afspilleren har sendt for denne session.



[show variable]



Vis værdien for medlemmer af en variabel.  Der kræves to parametre. den første 

er til at identificere variablen numerisk, den anden er navnet på egenskaben 

for variablen.  Den simple variabel $invokegetters bruges til at bestemme om 

funktionen til at hente egenskaber skal udløses  under forudsætning af at den 

findes.

Eksempel:

    show variable 1 __proto__



[show ?]



Udefineret show-kommando. Du kan få hjælp ved at skrive 'help show'



[source]



Læs fdb-kommandoer fra en fil, og eksekver dem.

  source mycommands.txt

  source mydir\mycommands.txt

  source c:\mydir\mycommands.txt

    Læser mycommands.txt og afvikler fdb-kommandoerne deri.

    Filen der indeholder kommandoerne, kan angives enten

	i forhold til den nuværende mappe (læs mere under kommandoen 'pwd')

	eller med en komplet sti.

På den måde indlæses filen .fdbinit automatisk når fdb startes.

Der ledes kun efter .fdbinit i den nuværende mappe. Det betyder at du kan have 

flere forskellige .fdbinit-filer liggende til forskellige lejligheder.



[step]



Spring i programmet indtil der nås en anden kildelinje.

Eksempler:

  step

    Spring en enkelt gang.

  step 3

    Spring 3 gange eller indtil programmet stopper af en anden grund.



[tutorial]



Vis en vejledning til brug af fdb.

Denne kommando kan ikke bruges sammen med argumenter.



[Tutorial]



En typisk fdb-session:

Start en applikation med 'run'.

Få filnavne vist med 'info sources'.

Få vist en fil med 'list'.

Angiv pausepunkter med 'break'.

Eksekver program med 'continue' indtil der nås et pausepunkt.

Undersøg programmets status med 'where', 'print' og 'info locals'.

Eksekver individuelle udsagn med 'next', 'step' og 'finish'.

Genoptag afvikling med 'continue'.

Afslut fdb med 'quit'.



[undisplay]



Fjern et eller flere auto-display-udtryk.

Eksempler:

  undisplay

    Fjern alle auto-display-udtryk.

  undisplay 2 7

    Fjern auto-display-udtryk nr. 2 og nr. 7.

Hvis du vil se en liste over auto-display-udtrykkene og deres numre, skal du 

skrive 'info display'.



[up]



Vælg og skriv stakrammen der kaldte denne.

Ved efterfølgende 'info'-argumenter og 'info locals'-kommandoer vises de lokale 

variable og argumenterne for den valgte ramme.

Læs mere under 'down' og 'frame'



[viewswf]



Angiver eller fjerner filter for filvisning (dvs. 'info files' og 'info 

sources') baseret på swf-filens navn 

Hvis der ikke angives nogen parametre, vises alle filer.  Hvis samme fil findes 

i flere swf-filer, er det kun den første forekomst af filen der vises.  Du kan 

gå direkte til andre forekomster af filen ved at bruge filens nummer (fx 'list 

#192') eller ved at bruge kommandoen med en parameter (læs mere herunder) for 

at vise filer fra en bestemt swf-fil.  Hvis du angiver swf-filens navn med en 

enkelt parameter, som vist med kommandoen 'info swfs', er det kun filerne fra 

den angivne swf-fil som vises.  

Filer fra andre swf-filer bliver ikke vist.  Kommandoen har også indflydelse på 

kommandoer der accepterer en fil som parameter (fx 'break')

Eksempel:

  viewswf myApp.mxml.swf

    Der bliver kun vist filer fra myApp.mxml.sfw.

  viewswf 

    Alle filer fra alle swf-filer bliver vist.

 

[watch]



Føj et overvågningspunkt til en given variabel. Fejlfinding standser 

afviklingen når variablens værdi ændres.

Eksempel:

  watch foo



[what]



Viser hvilken kontekst variablen fortolkes i. 



[where]



Tilbagesporing af stakken.



[zzz]



((( Keep this unused topic at the end of the file    )))

((( so that the next-to-last one is parsed properly. )))

