Fikse Feil i AS3: Introduction

Fixing Bugs i AS3: Introduksjon
Del
Del
to
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Hvordan fikse bugs i Flash.Quick-Tip:. Kaster feil Clean WayQuick Tips: Hvordan feilsøke en AS3 Feil # 1 009

I denne opplæringen, Jeg vil beskrive noen av de grunnleggende informasjonen du trenger for å feilsøke Flash-applikasjoner. Finne og rette feil i Actionscript er ingen liten oppgave, så dette er faktisk bare den første artikkelen i en serie. I denne utgaven, vil vi ta en titt på noen av de generelle ting du kan gjøre for å hjelpe spore opp dine feil.



De forskjellige typer feil

Først La oss diskutere hva en feil er. Det er tre hovedkategorier av feil, i ingen spesiell rekkefølge:

Iler Feil

Run-time feil

logiske feil

For å kunne skille mellom disse, er det nyttig å forstå prosessen med hvordan en SWF er gjort og presentert.

I prosessen med å lage en Flash-film (eller applikasjon, eller hva du vil kalle det), du skriver Action og lage grafiske eiendeler som brukes av filmen. Du kan bruke Flash Professional eller Flash Builder og Flex Framework, eller en tredjepart redaktør og IDE som FlashDevelop eller FDT. I alle tilfeller er det arbeidet du gjør for å lage filmen kjent som forfatter Hotell og tiden du bruker på å gjøre som er referert til som forfatter-tid
.

På et tidspunkt, vil du ønsker å se de tingene som du forfatter presenteres som de ville til sluttbrukeren. Før du kan se dette, skjønt, forfatter-time eiendeler (Actionscript, tegninger, bilder, fonter og tekst, etc) må være kompilert
inn i SWF at sluttbrukeren ser. Når du treffer "Publiser" eller "Test Movie" i Flash, eller "Run" i Flash Builder, er du kompilere SWF. Programmet du bruker til forfatteren vil ta forfatter-time eiendeler og samle dem i en SWF. Tiden det tar å gjøre dette kalles kompilere-tid
, som i, er de tingene som skjer i denne fasen sies å skje ved kompilering-tid.

Til slutt får du til å kjøre SWF i Flash Player og se hvordan det vil se ut og fungere når de presenteres. Dette skjer i nettleseren med Flash Player plugin, eller rett i Flash Professional når du velger "Test Movie", eller som en AIR applikasjon som kjører på skrivebordet (eller mobil enhet). Uansett detaljene om hvordan SWF blir presentert, er det nå kjører Hotell og vi opplever nå kjøre-tid
. SWF blir utført av Flash Player, og alle dine kompilert kode og grafikk er synlig

Vanligvis alt dette skjer for deg.; hvis du bruker Flash Professional, velge "Test Movie" vil kompilere SWF og deretter kjøre den i sin egen Flash Player. Hvis du bruker Flash Builder, velge "Run" vil kompilere SWF og deretter starte den i en nettleser. Denne tre-trinns prosess er vanligvis noe som du ikke tenke på, det er derfor jeg tar deg tid til å diskutere det i detalj.

Nå, på til feilene, og hvordan de forholder seg til disse stadiene.

Iler Feil er feil i koden som dukker opp på kompilere-tid
. Det er noe så fundamentalt galt med din kode som kompilatoren stopper i sitt spor og sier: "Whoah, hvis vi fortsetter, SWF vil bli alvorlig messed up. Jeg kan ikke gjøre det. Jeg kan bare ikke. "Vel, OK, det er ikke normalt så melodramatisk, men det vil kausjon ved første tegn på problemer, og sørg for at du ikke får tilfredsstillelse av å se din SWF kjøre før du fikse problemene.

Dette er vanligvis syntaks
feil - som mangler eller mis-matched bukseseler - ellers typen mis-kampene; ting som en maskin kan se på og vet er galt. Dette er feil som du vil se i Iler Feil panel i Flash Professional.


Iler Errors Panel
kompilatoren feil Panel

Run-time feil er feil som skjer mens SWF kjører. I dette tilfellet, er koden syntaktisk riktig, som det gjorde sin vei forbi kompilatoren uten feil (vi vet dette fordi SWF er i gang). Men koden har fortsatt noen feil i det som forårsaket den til å kjøre på en måte som Flash Player ikke liker; det enten ikke vet hva de skal gjøre med dette uventede resultatet eller det forårsaker en feil å fortelle deg at noe sviktet ved kjøring.

I disse tilfellene, får du en offisiell feil detaljering problemet og på minst en generell indikasjon på hvor i koden oppstod det. I Flash Professional, vil du se disse når du "Test Movie" i utdatapanelet.


En kjøretidsfeil i utdatapanelet

logiske feil er i utgangspunktet feil i hvordan programmet blir kontrollert. Disse er ikke kompilatoren feil; SWF er kompilert og kjører. Disse er ikke kjøretidsfeil; Flash Player har ikke kastet opp en stor feilmelding i ansiktet. Alt er teknisk
riktig og fungerer, men de er ikke fungerer slik du vil ha dem. Kanskje rutenettet du lagt ut programma har en for mange kolonner, eller handlekurven totalen ikke blir riktig beregnet, eller en brukerdefinert e-postadressen er validert som uakseptabelt når det virkelig er, eller en sekvens av bilder vises i feil rekkefølge.

Dette er de vanskeligste feil å finne, fordi de kan bare bli funnet ved hjelp av SWF slik det var ment å bli brukt, og sammenligne de faktiske resultatene nøye med hva du forventet å skje. Og en gang funnet, trenger du ikke få noen nyttig feilmeldinger som gir deg noen ide om hva som gikk galt.


Selv om vi kommet så langt uten kompilatoren eller kjøretidsfeil, er noe feil: vi mangler en null på prisen


Iler Feil:. Finn problemet

Iler Feil er vanligvis den enkleste å forholde seg til. Det er fordi, for en, stopper kompilatoren i sitt spor og forteller deg om feilen, og for to, forteller kompilatoren feilen selv du hva som er galt, forteller du filen og linjenummer, og selv skriver ut den linjen med kode for din referanse

Iler feil dukker opp i Iler Feil panel, så kan du ta en nærmere titt på denne spesielle element av Flash IDE.


Iler Feil Panel, Igjen

Som du kan se i den kommenterte diagrammet over, hver feil er oppført på en egen linje. Hver linje består av de samme grunnleggende informasjon. I den første kolonnen, vil du få filnavnet og linjenummeret der feilen ble funnet. I eksempelet ovenfor, oppstår feil i en klasse fil. Hvis du skrev kode direkte i Script panel, så vil du få noe sånt som "Scene 1, Layer" Layer 1 ", Frame 1, Line 1", som er det samme, bare for ikke-tekstlig-filbasert kode.

Å vite hvor feilen skjer er nyttig, men den andre kolonnen inneholder informasjon om hvorfor feilen oppstod. Den første biten er feilnummeret, som er som en ID. Hver type feil får sitt eget nummer. Dette etterfølges av en tekstbeskrivelse av feilen. Nå, for å være rettferdig, har Adobe noen heller obtusely formulert feil beskrivelser, og i fremtidige artikler i denne serien, vil vi prøve å dechiffrere noen av de mer vanlige de, slik at du kan mer effektivt håndtere dem. Inntil da kan vi i det minste vite at feilnummeret er forbundet med feilbeskrivelse. Teksten i beskrivelsen kan bli tilpasset for å presentere noen kontekstuell relevans, som å bruke variabel eller funksjon navnet fra kildekoden, men den generelle feilen er knyttet til nummeret. For eksempel er Error 1 067 en tvang feil, uansett om det er en tvang av en streng til en Displayobject eller av en matrise til en ExternalInterface.

En fullstendig liste over kompilatoren feil finner du på denne siden fra Adobes Action documentation:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/compilerErrors.html

Some feil blir gitt mer grundige forklaringer på denne siden


Iler feil. løse problemet

Det er bra om kompilator feil er at de er ganske lett å finne. Ikke bare gjør de dukker opp og hindrer deg fra å kjøre din SWF, men du kan komme til plagsom koden veldig lett fra Iler Feil panel. Bare dobbeltklikk eventuelle feil i panelet og den aktuelle kildefilen vil åpne opp, med markøren på rett linje. Nå, hvis du bruker Flash Professional med en ekstern editor, vil du finne deg selv å dobbeltklikke på vei inn å redigere filen i Flash Professional. Dette kan være mot dine grunner for å bruke et eksternt program, men minst feilen funnet er vanligvis ganske raskt, og du kan få det gjort ganske smertefritt. Selv om du bruker CS5 med stramt Flash Builder integrasjon, dobbeltklikke på feilen bringer opp filen i Flash Professional, ikke Flash Builder. Men Flash Builder har sin egen kompilator feil panel, som fungerer mye på samme måte.


Flash Builder Compiler Feil panel, eller "problemer" panel

På dette punktet, det er et spørsmål om å gå til linjen med kode spesifisert av feilen, og fikse det


Run-time feil. Finn problemet

Når du får gjennom kompilatoren feil, vil din SWF kunne kjøre, men på dette punktet kan du kjøre inn i run-time feil. Disse skje for en rekke årsaker - igjen, kommer vi til å utforske disse senere i denne serien - men for nå, la oss utforske anatomi av en kjøretidsfeil. Her er en typisk kjøretidsfeil som vises mens SWF kjører fra "Test Movie" i Flash Professional:


utdatapanelet viser en kjøretidsfeil

Det er potensielt kommer til å være mye tekst spytte ut på deg når en feil dukker opp. Det kan virke litt skremmende i begynnelsen, men det er egentlig bare to hoveddeler:


De to viktigste delene av kjøretidsfeil

Som kommentert ovenfor, den første biten av Feilen er beskrivelsen av hva som skjedde. Som kompilering-time feil, har hver type kjøretidsfeil en feil nummer, som er forbundet med en kort tekstlig beskrivelse. Beskrivelsen omfatter en error skriver
samt en nerd-tale setning. Feiltypen kan være nyttig for å få en bred oppfatning av hva som skjer, men beskrivelsen er det som virkelig forteller deg problemet. Vi vil ta en titt på et eksempel kort tid.

Den andre hoved stykket er all tekst etter første bit, kalt stabel spor
eller kallstakken Hotell og vi vil komme dypere inn på det neste trinnet.

Som compile-time feil, de tekstlige beskrivelser la litt å være ønsket. Når du får et håndtak på hva noen av de mer ofte sett feil mener, men vil du ha en idé om hva som er galt og vil vite hvor du skal lete.

En komplett liste over run-time feil er dokumentert her, noen som har notater sammen med them:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html


Run-time Feil: Forstå Stack Trace

La oss vende oss til den andre viktigste biten av kjøretidsfeil, stack trace
. Det kan variere i lengde alt fra en linje til en endelig-men-veldig-stort antall linjer. Hensikten med denne stakksporingen er å varsle deg om hvor i koden feilen oppstod.

Hver linje i stakksporingen representerer en enkelt operasjon funksjon. Den øverste linjen navngir funksjons hvor feilen faktisk skjedde; den inneholder linje med kode som blåste alt opp. Den andre linjen i de stakksporingen navnene funksjonen som kalles funksjonen som forårsaket feilen. Den tredje linjenavn funksjonen som kalles funksjonen som kalles funksjon der feilen oppstod. Og ... du skjønner poenget. Men la oss illustrere det mer praktisk. I følgende kode, vil funksjonen tredje forårsake en kjøretidsfeil ved å prøve å legge til "ingenting" til visningslisten. Men vi ikke kalle det med en gang; vi starte ting av ved å kalle den første funksjon, som kaller den andre funksjon, som i sin tur kaller endelig den tredje funksjonen:
første () -funksjonen første (): {void andre ();} funksjon andre (): void {tredje ();} funksjon tredje (): void {var s: Sprite; addChild (s);}

Hvis du limer den koden i Script panel av en splitter ny Flash-fil, og kjøre den, ser du følgende feilmelding:
Feiltype: Feil # 2007: Parameter barnet må være ikke- null. på flash.display :: Display /addChild () på Untitled_fla :: MainTimeline /tredje () på Untitled_fla :: MainTimeline /sekund () på Untitled_fla :: MainTimeline /første () på Untitled_fla :: MainTimeline /frame1 ()

Nå vet vi at feilen skyldtes sende en initialisert Sprite variabel til addChild. Funksjonen som faktisk kastet
feilen (som er den tekniske betegnelsen;. Når det oppstår en feil, betyr det at feilen ble kastet av en bestemt linje med kode jeg liker å tenke på det som ligner på å kaste et raserianfall ) er den addChild metoden, og så det er på toppen av listen. De neste tre linjene er de funksjonene vi skrev, oppført det nyeste først. Det ender (eller begynner, avhengig av hvordan du ser på det) med en oppfordring til frame1 i hovedtidslinjen. Dette er bare den metoden som kick off SWF. Hvis du hadde et dokument klasse satt opp, vil du se at i stedet. Siden dette eksempelet bare brukt et skript i den første rammen, får vi frame1.

Poenget er at du ringer frame1 slutt førte til en feilaktig kall til addChild, og du kan følge den veien for logikken ved å lese stakksporingen .

Denne komplette listen over funksjonskall kan synes å bare være et rot av informasjon du ikke trenger, men det finnes en rekke ganger når det kan hjelpe deg begrense på bug. Hvis feilen bare oppstår i den gitte funksjonen noen ganger
, du kan være i stand til å finne ut av problemet ved å spore trinnene tatt å komme til funksjonen. For eksempel, hvis det var litt mer samspill i funksjonene:
Var s: Sprite = new Sprite (); først (); funksjon først (): void {sekund ();} funksjon andre (): void { s = null; tredjedel ();} funksjon tredje (): void {addChild (s);}

Den tredje funksjonen er kanskje den mest umiddelbare gjerningsmannen, men en nærmere undersøkelse vil avsløre at den andre funksjonen var den som faktisk gjorde sa nullverdi .


Run-time feil: The Flash Debug Player

Et viktig verktøy for Flash-utvikler er debug versjon av Flash Player. Hvis du ikke har det installert allerede, bør du slutte hva du gjør (leser denne artikkelen) og gå laste den ned akkurat nå. Du er nødt til å starte nettleseren, som det er en re-installasjon av Flash Player, så bokmerke denne siden først

Gå hit for å laste ned den aktuelle installatøren:

http: //www .adobe.com /support /flashplayer /downloads.html

(Chrome-brukere: lese denne støtten notat for å finne ut hvordan du kan overstyre Chrome innebygde Flash Player.)

Når du starter din nettleser, vil du ikke merke mye annerledes med en gang. Men prøv den ut på denne SWF nedenfor. Først bør du se noen tekst som angir din nåværende Flash Player versjon, herunder om det er den debug-versjon eller ikke. Men klikk på den store knappen, som er kablet til en funksjon som til slutt vil kaste en feil. Hvis du prøver dette ut uten debug-spiller, vil du ikke se noe skje; feilen vil oppstå, men vil mislykkes lydløst. Hvis du prøver det med debug-spiller, men du vil få en ganske påtrengende og vanskelig å gå glipp av feilmeldingen:

Hvis du føler for lat til å faktisk installere debug-spiller, eller bare ønsker bekreftelse på at du gjorde det riktig, feilen ser du bør se omtrent slik ut:.


feil vindu vises når debug-spilleren er installert

Klart, etter å ha debug-spilleren installert er svært nyttig for å bli varslet av feil under testing av dine SWF i nettleseren. Som du kan forestille deg (eller allerede har lagt merke til), kan en SWF som går helt fint fra Flash IDE finne noe å klage på når den plasseres i et annet miljø, som webserveren. Tenk deg at SWF avhengig av en XML-fil for å laste, men hvis banen til at XML-filen er feil løst på webserveren i forhold til din lokale dev miljø, så en last feil vil oppstå. Det ville sikkert være nyttig å vite om dette så snart det skjer, heller enn å bli presentert med en ikke-arbeidende SWF og ingen ledetråder.

Ulempen til debug-spilleren er at det er ganske alt-eller-ingenting; du kan ikke ikke feilsøke områder du ikke utvikler. Det vil si, hvis du bare surfer på nettet, vil du til slutt utløse noen runtime feil i andre SWF. Det er irriterende, og gir deg en idé om hvor lite noen utviklere ta hensyn til deres testprosessen.

Som en ekstra spiss, kan du enkelt finne ut om du har vanlig eller debug versjonen av spilleren ved å høyre -clicking på noen SWF og leter etter de "Show tegne regioner" og "Debugger" alternativer i det:


Flash Player hurtigmenyen, da aktiveres fra en debug-spiller


Run -Tid Feil: Permit Debugging

Enten du viser run-time feil i IDE eller i nettleseren, er en feil bare informativ til et punkt. Hvis du har en feil som oppstår et sted
i en funksjon, men denne funksjonen skjer for å være 20 linjer lang, kan du ha litt problemer med å bestemme hvor den fornærmende kodelinje er.

Det er to teknikker som har de samme resultatene, ved at mer informasjon er gitt i form av kodelinje i spørsmålet for hver funksjon call of

Den første teknikken er mer umiddelbar. i stedet for å trykke på Kommando-retur /Kontroll-Enter for å teste filmen, trykker du på Kommando-Skift-retur /Ctrl-Shift-Enter for å debug
filmen. Dette starter SWF i Flash Player Debugger, med en debugging økten startet. Når en kjøretidsfeil utløses, vil du sprette tilbake til Flash IDE (som bør konfigurere seg selv inn i en debug arbeidsområde), og du vil se litt mer informasjon i bunken trace (merk spesielt linjenumrene lagt til utgangs nedenfor):
Forsøk på å starte og koble til spilleren ved hjelp av URL /Users/dru/Library/Caches/TemporaryItems/Untitled-1.swf[SWF] Brukere: Dru: Library: Caches: TemporaryItems: Untitled-1. swf - 2 291 bytes etter decompressionTypeError: Feil # 2007: Parameter barnet må være ikke-null. på flash.display :: Display /addChild () på Untitled_fla :: MainTimeline /tredje () [Untitled_fla.MainTimeline :: frame1: 12] ved Untitled_fla :: MainTimeline /sekund () [Untitled_fla.MainTimeline :: frame1: 8] på Untitled_fla :: MainTimeline /første () [Untitled_fla.MainTimeline :: frame1: 5] på Untitled_fla :: MainTimeline /frame1 () [Untitled_fla.MainTimeline :: frame1: 3]. Kan ikke vise kildekoden på dette stedet

Som en bonus, hvis mulig Flash vil åpne opp filen ansvarlig for å kaste feilen, og peker på den aktuelle linjen. Mange innebygde feil faktisk skje innsiden av innebygde klasser, og så det er ikke mulig å vise denne koden. Men hvis du har lyst til å se den i aksjon, kan du prøve følgende kode:
funksjon doIt (): void {trace ("do it");} Var functionRef: Function = doIt; functionRef ("argument ikke forventet" );

... og kjøre det gjennom Debug Movie. Linje 7 bør bli kalt ut.

Som vi har diskutert, men noen ganger trenger du å teste på en server og gjennom en nettleser, og Flash IDE er debugging anlegg er mindre nyttig i den forbindelse. Med debug-spiller som vi installerte i det siste trinnet, det er en måte å få linjenummer inkludert i kjøretidsfeil vinduet. Dette er så enkelt som å gjøre en publisering alternativ

I din Flash dokument, velger du Fil >.; Publiser Innstillinger ..., og klikk deretter på fanen Flash. Mot bunnen, under "Advanced" overskriften, vil du se en avkrysnings alternativ for Permit Debugging. Sørg for at denne er aktivert, og klikk "OK."


Permit Debugging alternativ i Flash Publish innstillinger

Publiser SWF igjen, og gjøre hva du trenger å gjøre for å kjøre den i nettleseren på nytt. Når en kjøretidsfeil oppstår nå, vil du se det samme linjenummer.


Runtime feil i nettleseren, med linjenummer

Du vil ikke få muligheten til å hoppe til kildekoden, men denne linjen antall triks kan spare deg for masse tid i å spore opp feil.

Men vær forsiktig med å slå av Permit Debugging når du er klar til å distribuere SWF til verden. Flash må legge ekstra informasjon til SWF for å gi linjenumrene, og den resulterende filstørrelsen på SWF er typisk 25 - 50% høyere enn det normalt er. Det er et nyttig debugging verktøy, men ikke noe du bør bare slå på for alt overalt


Run-time feil. Kast din egen

Jeg nevnte tidligere at det er mulig å kaste din egen feil ( og dine egne raserianfall, men jeg vil bare beskrive hvordan du gjør det tidligere). Dette kan være en nyttig teknikk i debugging. Hvis, for eksempel, har du følgende funksjon:
funksjon parseXML (xml: XML): void {//xml parsing følger ...}

Og denne funksjonen er integrert i funksjonaliteten til resten av filmen (vi kan antagelig ikke fortsette med XML-drevet brikke hvis XML ikke er analysert), så du kan være inne for en ubehagelig vendingen hvis XML objekt som blir gått inn i funksjonen en null objekt, eller kanskje spiller 't samsvar med den strukturen du forventer.

Du kan derfor vurdere, i denne viktige funksjonen, sette opp noen sjekker, og hvis de sjekker mislykkes, kaste noen feil. Det kan være så enkelt som dette:
funksjonen parseXML (xml: XML): (". XML objektet gått inn for å parseXML kan ikke være null") void {if (xml == null) {kaste nytt Feil} //xml parsing følger ...}

Strengt tatt, ville du sannsynligvis vil bruke ArgumentError i stedet for ren gamle feil, men resultatet er i hovedsak de samme. Hvis du kjører denne koden:
parseXML (null);

Du vil se en nyttig error:


runtime error

I tillegg kan du forvente at XML kan ikke være null, men kan bli endret på en måte som ikke samsvarer med forventningene til parsing funksjonen. Hvis du trenger en node navnet < oppføringer > å bli fylt med barn noder navnet < entry >, men på grunn av menneskelige feil XML-filen så slik ut:
< innhold > < oppføringer > < element name = "en" /> < element name = "to" /> < element name = "tre" /> < /oppføringer > < /content >

Så analyser ikke ville fungere. Du kan beskytte mot dette:
funksjonen parseXML (xml: XML): (". XML objektet gått inn for å parseXML kan ikke være null") void {if (xml == null) {kaste nytt Feil} //xml parsing begynner ... på enkelte punkt: var oppføringer: XMLList = xml.entries.entry; if (entries.length () == 0) {kaste nytt Error ("Det var ingen noder hindringer i < oppføringer > noder." + "i stedet, det så slik ut: \\ n" + xml.entries.toXMLString ( )); } Else {//xml parsing følger ...}}

Og du bør få denne feilmeldingen:


En annen nyttig kjøretidsfeil

Du bare kan spare deg selv, eller noen andre, en tid ned linjen når XML-filer er redigert feil


Run-time feil. Få Stack Trace Uten en feil

Noen ganger stakksporingen er nyttig i seg selv, selv om det har oppstått noen feil. For eksempel, nå og da finner jeg meg selv med en metode som er å få kalt oftere enn jeg tror det skal. Hvis jeg bare kunne se hvilke andre metoder kaller det, så jeg kunne finne hvor den ekstra samtalen kommer fra.

Ved første øyekast, kaster feil ville synes en passende løsning. Men en feil har en tendens til å stoppe en Flash-film i sitt spor. Hvis den første feilen gir meg en stabel spor, kan det hindre den andre samtalen fra stadig skjer fordi den første feilen forhindret det. I slike situasjoner er det fint å vite litt mer om Feil stedene.

Mest nyttig er den getStackTrace metoden, som returnerer stabel spor som det ville bli presentert var feil å bli kastet. Det fine er imidlertid at det ikke trenger å faktisk bli kastet å få denne informasjonen. Så, hvis du er rett og slett nysgjerrig på å se stabel spor uten å kaste feil, kan du gjøre noe sånt som dette:
funksjonen whoCalledme (): void {var e: Feil = new Error (); Var stack: String = e.getStackTrace (); trace (stack);}

Hvis du viser dette i Flash IDE, forskjellene mellom denne og en kastet feil vil være vanskelig å få øye; De vil begge bare ut en haug med informasjon til utdatapanelet. Du bør kanskje vurdere å pynte sporet for å gjøre det lettere å se forskjell. Hvis du tester i nettleseren, men denne koden vil ikke presentere feil vindu, men rett og slett skrive til flash loggen for gjennomlesing (jeg får foran meg selv, sporing fra nettleseren er dekket i noen få trinn) .


Trace pokker ut av alt

Apropos spor, når det gjelder feilsøking, er tracing det beste verktøyet du har tilgjengelig. Jada, Flash Professional og Flash Builder begge har debuggere, som lar deg sette stoppunkter, step gjennom koden, og inspisere variabler, men helt ærlig, synes jeg den raskeste ruten mellom insekt og samle nok informasjon til å fikse det er en håndfull judiciously lagt spor . Spor er nyttig for debugging både kjøre-tid og logiske feil, men fordi vi har verktøy for å få informasjon om kjøre-time feil, kan spor være den første forsvarslinje mot logiske feil.

Hvis jeg er debugging en logisk feil, jeg vanligvis vet om hvor du skal fokusere. Det som ikke fungerer er vanligvis lokalisert til en klasse eller to, og vanligvis til en håndfull av metoder og egenskaper. Så, i løpet av de potensielle problemområder, jeg spore pokker ut av alt

Mer praktisk talt, pleier jeg å gjøre følgende:.

  • Sett et spor som den første setningen i en funksjon eller metode, sammen med en produksjon på alle parametere, bare for å sørge for at funksjoner er å bli kalt og parametere er hva jeg forventer at de skal være.

    Trace enhver variabel eller eiendom som brukes i funksjonen, ved minst en gang. Dersom eiendommen er utsatt for endringer i løpet av funksjon, sette et spor før og etter potensiell endring.
  • Trace noen betinget utsagn, bare for å flagge hvilken gren du får til.
  • Trace alle gjentakelser løkker, som regel med litt informasjon om iterasjon (som indeksnummer og /eller objektet fra Array relevant for at iterasjon)

    Hvis en variabel er et komplekst objekt, som en Sprite eller en Sound, spor flere eiendommer av objektet

    Som en stilistisk regel finner jeg det utrolig nyttig å sørge for at sporet er merket, også. Det vil si at noe sånt som dette:
    trace ("mySprite:" + mySprite);

    Denne måten, etter at du har lagt til et dusin spor til koden din, kan du identifisere en som sier null blant alle andre spor lettere.

    I tillegg kan du selv ønsker å foranstille klassen (og metode) navn i dine spor, bare for å hjelpe videre identifisere kilden til hvert spor.

    Det er ingen harde og raske regler for sporing, bare min generelle anbefaling å spore alt, selv ting du tror du trenger ikke å, bare for å være sikker. På dette punktet, er et spørsmål tilbake til leserne passende: hva trace teknikker du stole på? Føl deg fri til å starte en flamme krig i kommentarfeltet

    . [Red.anm: Vennligst ikke starte en flamme krig i kommentarfeltet.]


    Tracing: Trace fra Nettleseren

    En annen fordel med debug-spilleren (til Flash Developer, selvfølgelig) er evnen til å se dine spor fra nettleseren, slik at du kan mer effektivt teste og feilsøke en SWF i sitt naturlige habitat.

    Dessverre, skritt må tas for å aktivere denne tracing, og jeg skal ikke gjenta det som har blitt skrevet andre steder. Et søk på "flash debug spor" vil gi mange how-to artikler, som min favoritt er for tiden på toppen av listen på Google, en detaljert artikkel om yourpalmark.com som dekker ulike versjoner av spilleren på Mac, Windows , og Linux-systemer.

    Jeg vil legge inn et tips for Macintosh-brukere. Konsoll-programmet er nevnt i forbifarten i den koblede artikkelen, men egentlig ikke forklart eller, etter min mening, gjort bruk av riktig. Konsollen er installert med Mac OS X, og er bosatt i /Programmer /Verktøy-mappen. Det er ideelt for visning av loggfiler, som dine debug-spiller spor faktisk er. Det er smart om du blar til bunnen hvis du allerede er på bunnen, men ikke rulle hvis du ikke. Det er lett å filtrere og søke i loggen, og jeg synes det er uunnværlig for Flash utvikling.


    Mac Konsoll-programmet i bruk i Flash spor

    Trikset er imidlertid at mens Konsollen kan åpne hvilken som helst tekstfil, det bare husker
    filer hvis de er i standard loggfilen steder på systemet ditt, og Selge hvis de er .log-filer. Men Flash debug-spilleren bare skrive spor til en fil som heter flashlog.txt, som er i en ikke-standard loggfilplassering. Det er en enkel terminal kommando du kan gi til å lage en symbolsk lenke på rett sted:
    ln -s ~ /Library /Preferences /Macromedia /Flash \\ Player /Logs /flashlog.txt ~ /Library /Logs /flashlog. log

    Jeg skrev mer om dette trikset på min selskapets Flash blogg her: http://summitprojectsflashblog.wordpress.com/2008/12/17/leopards-console-and-flash-debug-player-traces/


    The Flash Debugger

    Som nevnt tidligere, Flash Professional og Flash Builder både gi debugger miljøer. Personlig finner jeg disse av begrenset nytteverdi, så jeg foretrekker å stole på spor og kjøre-time feil. Også, ved hjelp av debugger effektivt er avhengig av å være i stand til å sette stoppunkter, som bare kan (lett) gjort i koden som er åpent i Flash Professional eller Flash Builder. Som et spørsmål om personlig preferanse jeg bruker Textmate som min redaktør av valget, noe som gjør innstilling stoppunkter tungvint. Jeg ville vært galt, men hvis jeg ikke nevner Flash Debugger i en artikkel om Flash debugging.

    Her er en rask gjennomgang av debugging verktøy du får med Flash Professional. La oss gå tilbake til vår kjøre-time error produserende eksempel fra tidligere. Lim denne koden inn i skriptet panel av en Flash-fil:
    Var s: Sprite = new Sprite (); først (); funksjon først (): void {sekund ();} funksjon andre (): void {s = null; tredjedel ();} funksjon tredje (): void {addChild (s);}

    Før treffer Debug Movie, skjønt, klikker du til venstre for tallet "5" i Script panel

    <. br>
    stoppunkter kolonne

    En rød prikk vil dukke opp i kolonnen, som indikerer en stoppunkt er satt. For å fjerne et stoppunkt, klikker du ganske enkelt på nytt. Med stoppunkt ligger på linje 5 (der andre kalles innsiden av første), gå videre og Debug Movie. Nå er vi forventer debug-arbeidsområdet til å ta over på grunn av feil, men hvis du legger merke til hva som skjer, har feilen faktisk ikke skjedd (ennå). Det er en gul pil som peker på linje 5, som angir at programmet kjøres er pauset på vår stoppunkt. På dette punktet, har vi muligheten til å gå gjennom koden en linje av gangen, og i prosessen inspisere verdien av variablene, og hjelper oss med å finne feilen.


    Vi har treffer bristepunktet

    Flytt oppmerksomheten mot Variabler panel, i nedre høyre hjørne.


    Variabler panel

    Twiddle åpne dette innlegget, og du vil se en nestet liste over alle eiendommer som tilhører "dette", som er den viktigste tidslinjen vår SWF. Scroll ned og du vil se "s", vår Sprite variable.