Det är svårt att skriva program som beter sig korrekt i närvaro av run-time fel. Befintliga programmeringsspråkfunktioner ger ofta dåligt stöd för att utföra rensningskod och återställa invarianter i sådana exceptionella situationer. Vi presenterar en dataflödesanalys för att hitta en viss klass av felhanteringsfel: de som uppstår från ett misslyckande att frigöra resurser eller att städa upp ordentligt längs alla vägar. Många verkliga program bryter mot sådana resurssäkerhetspolicyer på grund av felaktig felhantering. Vår flödeskänsliga analys håller reda på utestående skyldigheter längs programvägar och gör en exakt modellering av kontrollflödet i närvaro av undantag. Med hjälp av den har vi hittat över 800 felhantering misstag nästan 4 miljoner rader Java kod. Analysen är osund och ger falska positiva resultat, men några enkla filtreringsregler räcker för att ta bort dem i praktiken. De återstående misstagen kontrollerades manuellt. Dessa misstag gör att uttag, filer och databashandtag läcker ut längs vissa vägar. Vi presenterar en karakterisering av de vanligaste orsakerna till dessa fel och diskuterar begränsningarna av undantagshantering, finalizers och destructors i att ta itu med dem. Baserat på dessa fel, föreslår vi en programmering språkfunktion som håller reda på skyldigheter i körtid och ser till att de skrivs ut. Slutligen presenterar vi fallstudier för att visa att denna funktion är naturlig, effektiv och kan förbättra tillförlitligheten; till exempel, eftermontering av ett 34kLOC-program med det resulterade i en 0,5% kodstorlek minskning, en överraskande 17% hastighetsökning (från korrekt deallokering resurser i närvaro av undantag), och mer konsekvent beteende. - Vad är det för fel på dig?
Weimer och Necula REF använder dataflödesanalys för att hitta resurshanteringsfel i felhanteringskoden och föreslår ett språktillägg för att förbättra tillförlitligheten.
Finding and preventing run-time error handling mistakes
{'venue': "OOPSLA '04", 'journal': None, 'mag_field_of_study': ['Computer Science']}