Felhantering 2017

Relevanta dokument
Felhantering TDDD78, TDDE30, 729A

Felhantering 2016

Felhantering 2015

Testning av program. Verklig modell för programutveckling

Klassen javax.swing.timer

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsnings 9 - Exceptions, I/O

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

OOP Objekt-orienterad programmering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Objektorienterad programmering

Kopiering av objekt i Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Fördjupad Java. Undantagshantering. Fel

Kapitel 6 - Undantag

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

TUTORIAL: KLASSER & OBJEKT

Att skriva till och läsa från terminalfönstret

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Länkade strukturer, parametriserade typer och undantag

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDDC76 - Programmering och Datastrukturer

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

1 Comparator & Comparable

Tentamen FYTA11 Javaprogrammering

C++ Objektorientering - Klasser. Eric Elfving

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Design by Contract, Exceptions. Objekt-orienterad programmering och design (DIT953) Johannes Åman Pohjola, 2018

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Föreläsning 14. Filhantering

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Testning och felhantering

Objekt, Klasser, Paket m. m.

Föreläsning 2: Avlusning och antilustekniker

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Objektorienterad programmering

ID1004 Laboration 4, November 2012

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Tentamen Grundläggande programmering

HI1024 Programmering, grundkurs TEN

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

4.4 Swing ett interaktivt grafiskt gränssnitt

Repetition av OOP- och Javabegrepp

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Exceptions (undantag) Murach s: kap 7

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

HI1024 Programmering, grundkurs TEN

Avancerad Java/ Loggning

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Språket Python - Del 2 Grundkurs i programmering med Python

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Objektorienterad Programmering (TDDC77)

Typkonvertering. Java versus C

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Repetition av OOP- och Javabegrepp

Objektorienterad programmering i Java I

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Föreläsning 2 Programmeringsteknik och C DD1316

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Design by Contract, Exceptions, Initialisering. Objekt-orienterad programmering och design (DIT952) Johannes Åman Pohjola, 2017

Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

TUTORIAL: SAMLING & KONSOLL

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Sammansatta datatyper Generics: Parametrisk polymorfism

SaaS and Web Services 8.3.0

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad Programkonstruktion. Föreläsning jan 2017

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Föreläsning 6: Metoder och fält (arrays)

Transkript:

Felhantering jonas.kvarnstrom@liu.se 2017

Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som vi kontaktar svarar och glömmer att ta hand om fel! Filer saknas Minnet tar slut Servrar är inte tillgängliga Upptäck att ett fel har uppstått Hantera felet på något sätt Laga felet själv Signalera till någon annan

Exempel 4 Exempelproblem: Konvertera sträng till heltal Sträng: ( tecken) Första siffran är Andra siffran är Tredje siffran är Fjärde siffran är, ett heltal Hur går vi från tecken till heltal? Java använder Unicode har numeriskt värde har numeriskt värde 4 steg

Exempel 5 Kodexempel

Exempel 6 Utökning: Läs in ett positivt heltal från användaren ger alltid strängar, tecken för tecken Var alltid misstänksam mot användarens indata!

Upptäcka fel: Själv 7 Ibland kan användaren göra fel i inmatningen

Upptäcka fel: Själv (2) 8 Jonas

Upptäcka fel: Själv (3) 9 Ingen kan upptäcka det åt oss det är vi som måste hitta felet Ignorera? Nej Felaktig input! Vad ska vi göra? Laga felet själva? Går inte! Signalera till anroparen!

Hur signalerar man fel? 10 Ett sätt att signalera: Speciella returvärden Metoden läser positiva heltal -1 kan aldrig returneras om vi "lyckas" Kan användas som speciell "signal" Returvärden används t.ex. i C (): fel (): fel (): OK, fel (): filslut eller fel (testa med ferror() / feof())

Kontrollera returvärde 11 Nu måste anroparen upptäcka att något gick fel Det signaleras men man måste titta på signalen

Kontrollera returvärde (2) 12 Signalering med returvärden kan ge problem 1) Tänk om vi glömmer testa! Krasch: Array med negativ storlek 2) I parseanyinteger() (även negativa) finns inget "ledigt" returvärde som kan betyda "fel"

Kontrollera returvärde (3) 13 3) Jobbigt om det finns mellannivåer

Undantag 1: Intuitioner 15 Ett alternativ: 1. Inför speciella kontrollstrukturer för att signalera fel 2. Inför speciella kontrollstrukturer för att visa var felen kan hanteras 3. Låt felen automatiskt skickas vidare ända till hanteraren Metod som anropar, och vill hantera fel Metod som anropar Felsignalen kastas (throw) och fångas (catch) Mellanmetoderna avbryts istället för att returnera normalt Metod som anropar Metod som signalerar fel

Undantag 2: Signalera fel 16 Fel kallas undantag (exceptions) Fel hanteras separat Reservera inte returvärden, deklarera feltyper istället Fel kasta ett undantag (avbryter exekveringen, inget värde returneras)

Undantag 3: Att läsa kod signalering 17 Speciell syntax lättare att se var fel signaleras

Undantag 4: Att läsa kod felhantering 18 Gammal felhanterare: Vanlig villkorssats mitt i en funktion Exceptions: Egen kontrollstruktur, try / catch Felhanteringskod separeras från övrig kod

Undantag 5: Skicka vidare, automatiskt 19 Kan automatiseras för att vi vet vad som är en felsignal Fångas och hanteras här Fångas inte här skickas vidare Fångas inte här: Ligger inte inom try/catch Går automatiskt till anroparen

Undantag 6: Objekt 20 I Java är undantag objekt (som hanteras speciellt!) Typ: Subklass till Har fält, konstruktorer Kan lagra felinformation

Kontrakt 1: throws 22 Metoder deklarerar vilka undantag som kan kastas Ingår i kontraktet! "Jag lovar att inte signalera några andra fel än FileNotFoundException" Behöver inte titta i kod eller dokumentation för att se vilka fel som kan uppstå, hur de signaleras (): fel (): fel (): OK, fel (): filslut eller fel

Kontrakt 2: Underklasser 23 Vi vet: Kontraktslöften får inte försvagas i underklasser! Kompilatorn klagar: StreamReader säger att bara IOException kan kastas

Kontrakt 3: Efterlevnad 24 Kompilatorn kontrollerar att kontraktet efterlevs Måste fånga med try-catch: Eller tala om att fel kan skickas vidare: Med speciella "felvärden" kunde vi glömma att testa returvärdet

Kontrakt 4: Undantag (!) 25 kan inträffa nästan var som helst : Vissa allvarliga fel Ska fortfarande representeras som undantag, inte "krascha" Lättare att felsöka Ska normalt inte fångas Interna datastrukturer kan ha "förstörts", just eftersom man inte kan gardera sig mot det som kan inträffa var som helst Behöver inte deklareras ingår ej i kontrakt

Hantera 1: Fixa felet 27 Ibland kan man uppfylla kontraktet trots felet På lägre nivå uppstod ett fel På högre nivå var detta inte viktigt, målet nåddes ändå Måste inte informera någon men ibland vill man ändå logga felet

Hantera 2: Skicka vidare 28 Kan man inte uppfylla kontraktet måste anroparen informeras! Informera genom att inte fånga fel: IOException från FileOutputStream skickas automatiskt vidare

Hantera 3: Fånga och kasta om 29 Man kan alltid tillfälligt fånga upp felet Fånga upp felet, städa, kasta vidare samma objekt

Hantera 4: Gemensamt eller separat? 30 Mindre kod, lättare att läsa Vet på vilken rad felet uppstod Anpassa till situationen!

Hantera 5: Vad ska jag fånga? 31 Catch fångar fel av en typ och dess subtyper Fångar alla feltyper på en plats: Ser inte vilka fel som kan uppstå Hur vet man om varje feltyp hanteras rätt? Ange specifika fel som ska hanteras "Exception" är definitivt för brett: Fångar även RuntimeExceptions (null-pekare, ) Om man vill hantera flera feltyper på samma sätt

Felfel 1: Fånga och ignorera följdfel 32 Tror allt gick bra, men doc är fortfarande null NullPointerException I många projekt inträffar kraschen långt senare svårt att hitta ursprungsfelet Vanligt felhanteringsfel: Skriver ut felmeddelande, informerar inte anroparen

Felfel 1b: Fånga och ignorera följdfel 33 men anroparen själv fångar felet, ignorerar det, fortsätter, och kraschar senare! Här är loadfile() korrekt

Undvik felhanteringsfel! 34 För att undvika problem, tänk alltid: Vad händer efter jag fångar upp felet? Uppfyller jag mina löften? Får någon reda på om jag inte uppfyller mina löften? Hur fortsätter exekveringen av programmet?

Vem informerar användaren? 35 Vi delar upp klasser i två kategorier De flesta klasser och metoder används bara av andra klasser Vissa klasser och metoder tillhör användargränssnittet Misslyckanden ska signaleras till anroparen Kan också loggas till loggfil Får prata med användaren Textutmatning, GUI

Informera 2: Inte lågnivåklasser 36 Om användaren måste informeras: Inte av en lågnivåklass! Inte ens om klassen också informerar anroparen, som här Denna klass är ett verktyg, inte del av användargränssnittet (som kanske föredrar dialogruta)!

Informera 3: I rätt klass 37 Klasser i användargränssnittet kan själva informera användaren Kontraktet anpassas: saveorinform säger inte sparar definitivt filen.

Felfel 2: Fånga och gissa 38 Glöm att starta databasen spendera tre timmar på att hitta rätt lösenord

Informera 4: På hög nivå 39 Ett välpolerat program visar (helst) inte råa felmeddelanden Anpassar dem till användaren

Informera 5: På låg nivå 40 Som utvecklare behöver vi mer detaljer! Finns i undantaget vi fångar men skriv inte bara ut det! Säger inget om var felet inträffade Skriv åtminstone ut en stack trace Om felet absolut inte kan inträffa ( when pigs fly ): Det kan det nog ändå Skriv åtminstone ut en stack trace Eller logga felet till fil!

Helt fel: Använda undantag i normalfall 42 Undantag ska användas i undantagsfall Här blir det en exception vid varje anrop!

Typer 1: Inbyggda undantagstyper 44 Undantagsklasser ska vara så specifika som möjligt, för att: Se exakt vilka problem som kan inträffa Fånga specifika fel, utan att fånga andra Ge förståeliga felmeddelanden Använd inbyggda feltyper där de passar! Exempel: Passar perfekt!

Typer 2: Skapa dina egna 45 Om det inte finns några passande typer? Gör inte så här: Kan inte särskiljas av programmet! Anroparen kan inte skilja user already exists från database error, osv. Skapa en egen undantagstyp!

Hitta möjliga fel 47 Hur upptäcker vi alla fel som kan uppstå? Murphys lag Framställs ofta som "Om något kan gå fel kommer det att göra det" Gäller även här: Egentligen sa han att "Om det finns två eller fler sätt att göra något, och ett av dessa sätt leder till en katastrof, kommer någon att göra det på det sättet" förespråkade defensiv design Edward Aloysius Murphy, Jr. Ingenjör i amerikanska flygvapnet

Var misstänksam 48 Ett steg på vägen: Var alltid misstänksam Testa att antaganden verkligen stämmer

Assertions 1 49 Vi är säkra på att det här fungerar! Men om det finns ett fel, kan det bli väldigt svårt att upptäcka (inträffar sällan)

Assertions 2: Var misstänksam 50 Vi är defensiva och misstänksamma: Stoppar in ett test Tar för mycket tid i slutgiltiga versionen! Vill ha en debugflagga för att slå av och på tester

Sidospår: Debugflaggor 51 För att få in värdet på en flagga: Kommandoradsparametrar: Hantera själv Bra för vanliga parametrar System properties: Hanteras av Java, görs tillgängliga globalt Bra för utvecklarens kontroll på låg nivå

Assertions 3: Prestanda 52 Java optimerar kod vid körning false? Optimeraren tar bort testet koden kör i full fart! Jättebra, men Kan vi förenkla det?

Assertions 4: Inbyggt nyckelord 53

Assertions 54 Javas assert-sats: Talar om vad du "vet" definitivt är sant Ungefär lika med:

Assertions vs. Undantag 55 Använd assertions för att fånga interna buggar men undantag för att signalera fel från anroparen! Bara falskt om klassen har ett fel Kan använda assertions Kolla fel argument från extern anropare Undantag En assertion här skulle betyda "jag vet att ingen någonsin kör pop() när kön är tom" men det beror på anroparen Kom ihåg: Påstå bara det som du "vet" är sant

Assertion-kontroll 56 Assertions kontrolleras bara om parameter ea anges! Annars optimeras den bort vid körning Behåll assertions i produktionskod, be användarna slå på dem om de har problem Ännu viktigare att bara använda dem för att verifiera det man vet!

Loggning 1 58 Många program loggar vad som händer Uppstart och parametrar underlättar senare felsökning 2015-02-03 09:17:21,476 [ 0] INFO - ------------------------------------------------------ IDE STARTED ------ ------------------------------------------------ 2015-02-03 09:17:21,520 [ 44] INFO - IDE: IntelliJ IDEA (build #IU-139.463.4, 19 Nov 2014 00:00) 2015-02-03 09:17:21,520 [ 44] INFO - OS: Windows 7 (6.1, x86) 2015-02-03 09:17:21,520 [ 44] INFO - JRE: 1.8.0_25-b18 (Oracle Corporation) 2015-02-03 09:17:21,520 [ 44] INFO - JVM: 25.25-b02 (Java HotSpot(TM) Server VM) 2015-02-03 09:17:21,528 [ 52] INFO - JVM Args: -Xms128m -Xmx512m -XX:MaxPermSize=250m - XX:ReservedCodeCacheSize=150m -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true - Djsse.enableSNIExtension=false -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 - XX:+HeapDumpOnOutOfMemoryError -Xbootclasspath/a:C:\Program Files (x86)\jetbrains\intellij IDEA 14.0\lib\boot.jar -Didea.paths.selector=IntelliJIdea14 2015-02-03 09:17:21,899 [ 423] INFO - JNA library loaded (32-bit) in 371 ms 2015-02-03 09:17:21,918 [ 442] INFO - penapi.util.io.win32.ideawin32 - Native filesystem for Windows is operational 2015-02-03 09:17:21,934 [ 458] INFO - Using "FocusKiller" library to prevent focus stealing.

Loggning 2 59 Under programkörning vad som sker, hur lång tid det tar, 2015-02-03 09:17:37,687 [ 16211] INFO - unicator.p2p.usermonitorthread - Force finding users 2015-02-03 09:17:37,687 [ 16211] INFO - unicator.p2p.usermonitorthread - Start User Monitor Thread 2015-02-03 09:17:37,688 [ 16212] INFO - icator.p2p.multicastpingthread - /192.168.56.1 IDEtalk Multicast Thread: Start thread. 2015-02-03 09:17:37,689 [ 16213] INFO - icator.p2p.multicastpingthread - /130.236.184.131 IDEtalk Multicast Thread: Start thread. 2015-02-03 09:17:39,486 [ 18010] INFO - indexing.unindexedfilesupdater - Indexable files iterated in 1527 ms 2015-02-03 09:17:39,487 [ 18011] INFO - indexing.unindexedfilesupdater - Unindexed files update started: 428 files to update 2015-02-03 09:17:39,743 [ 18267] INFO - bugs.resources.resourcesloader - Loading locale properties for 'en_us) 2015-02-03 09:17:40,215 [ 18739] INFO - rains.ide.pooledthreadexecutor - Not enough pooled threads; dumping threads into a file 2015-02-03 09:17:42,296 [ 20820] INFO - indexing.unindexedfilesupdater - Unindexed files update done in 2809 ms 2015-02-03 09:17:42,429 [ 20953] INFO - unicator.p2p.usermonitorthread - Force finding users 2015-02-03 09:17:42,739 [ 21263] INFO - CompilerWorkspaceConfiguration - Available processors: 8 2015-02-03 09:17:43,422 [ 21946] INFO - tor.impl.fileeditormanagerimpl - Project opening took 9363 ms 2015-02-03 09:17:44,163 [ 22687] INFO - or.jabber.impl.jabbertransport - Jabber connected 2015-02-03 09:17:53,060 [ 31584] INFO - dvertisement.pluginsadvertiser - Read timed out

Loggning 3 60 Fel som inträffar 2015-02-03 09:19:35,574 [ 134098] INFO - ins.idea.svn.svnchangeprovider - svn: E155007: 'C:\devel\svnwc2\teach\java\source\app\clock\ClockComponent.java' is not a working copy org.jetbrains.idea.svn.commandline.svnbindexception: svn: E155007: 'C:\devel\svnwc2\teach\java\source\app\clock\ClockComponent.java' is not a working copy at org.jetbrains.idea.svn.status.svnkitstatusclient.dostatus(svnkitstatusclient.java:82) at org.jetbrains.idea.svn.svnchangeprovider.processcopiedfile(svnchangeprovider.java:256) at org.jetbrains.idea.svn.svnchangeprovider.processcopiedanddeleted(svnchangeprovider.java:169) at org.jetbrains.idea.svn.svnchangeprovider.getchanges(svnchangeprovider.java:100) at com.intellij.openapi.vcs.changes.changelistmanagerimpl.a(changelistmanagerimpl.java:738) at com.intellij.openapi.vcs.changes.changelistmanagerimpl.a(changelistmanagerimpl.java:655) at com.intellij.openapi.vcs.changes.changelistmanagerimpl.d(changelistmanagerimpl.java:530) at com.intellij.openapi.vcs.changes.changelistmanagerimpl.access$1200(changelistmanagerimpl.java:75) at com.intellij.openapi.vcs.changes.changelistmanagerimpl$actualupdater.run(changelistmanagerimpl.java:438) at com.intellij.openapi.vcs.changes.updaterequestsqueue$myrunnable.run(updaterequestsqueue.java:260) at java.util.concurrent.executors$runnableadapter.call(executors.java:511) at java.util.concurrent.futuretask.run(futuretask.java:266) at java.util.concurrent.scheduledthreadpoolexecutor$scheduledfuturetask.access$201(scheduledthreadpoolexecutor.java:180) at java.util.concurrent.scheduledthreadpoolexecutor$scheduledfuturetask.run(scheduledthreadpoolexecutor.java:293) at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142) at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617) at java.lang.thread.run(thread.java:745) Caused by: org.tmatesoft.svn.core.svnexception: svn: E155007: 'C:\devel\svnwc2\teach\java\source\app\clock\ClockComponent.java' is not a working copy at org.tmatesoft.svn.core.internal.wc.svnerrormanager.error(svnerrormanager.java:64) at org.tmatesoft.svn.core.internal.wc.svnerrormanager.error(svnerrormanager.java:51)

Loggning 4 61 Java: Inbyggt i paketet java.util.logging Särskilt viktigt för undantag som beror på buggar i programmet

Loggning 5 62 Flera nivåer så att man kan filtrera Lämna alla logganrop i koden Filtrera med logger.setlevel(level.info);

Loggning 6 63 Var hamnar loggmeddelanden? Default: Skrivs ut på standard error Kan även loggas till fil Kräver konfigurationsfil exempel: logconfig.properties innehåller handlers = java.util.logging.filehandler java.util.logging.filehandler.level = WARNING java.util.logging.filehandler.append = true java.util.logging.filehandler.pattern = log.%u.%g.txt http://docs.oracle.com/javase/8/docs/technotes/guides/logging/overview.html

Avslutande ord 64 As far as we know, our computer has never had an undetected error. Conrad H. Weisert