close

Stapelspoor

Spring naar navigatie Spring naar zoeken

In de informatica is een stacktrace (letterlijk vanuit het Engels vertaald als "stack trace"), ook wel stack backtrace [1] of stack traceback [2] genoemd , een lijst van de stackframes die op een bepaald moment tijdens de uitvoering van een programma . Wanneer een programma wordt uitgevoerd, wordt geheugen vaak dynamisch toegewezen aan twee locaties: de stapel en de heap . Technisch gezien, als een geheugenblok eenmaal op de stapel is toegewezen, kan het niet gemakkelijk worden verwijderd, omdat er mogelijk andere geheugenblokken zijn toegewezen. Telkens wanneer een functie in een programma wordt aangeroepen, wordt een geheugenblok, het activeringsrecord (of stackpointer) genoemd, bovenop de runtime-stack toegewezen. Op een hoog niveau wijst een activeringsrecord geheugen toe voor functieparameters en lokale variabelen die in de functie zijn gedeclareerd.

Met een stacktracering kunt u de volgorde van aangeroepen geneste functies traceren , tot het punt waar de stacktracering wordt gegenereerd. Dit is vooral handig wanneer de tracering wordt gegenereerd als gevolg van een fout. Om deze reden gebruiken programmeurs vaak stack tracing bij het debuggen . Soms ziet zelfs de eindgebruiker een stacktrace als onderdeel van een foutmelding , die hij later aan de programmeur kan melden.

Voorbeeld

Neem bijvoorbeeld het volgende Python -programma dat een fout bevat:

zeker  een ():
    ik  =  0
    j  =  b ( ik )
    terug  j

def  b ( z ):
    k  =  5
    als  z  ==  0 :
        c ()
    retour  k  +  z

def  c ():
    fout ()

een ()

Het uitvoeren van het programma met de standaard Python-interpreter levert de volgende foutmelding op:

Traceback (meest recente oproep als laatste): 
  Bestand "tb.py" , regel 15 , in <module> 
    a () 
  Bestand "tb.py" , regel 3 , in a 
    j  =  b ( i ) 
  Bestand "tb.py" , regel 9 , in b 
    c () 
  Bestand "tb.py" , regel 13 , in c 
    error () 
NameError : naam 'error' is niet gedefinieerd

De stacktracering laat zien waar de fout is opgetreden, namelijk in de functie c. Het bericht meldt ook dat de functie cwerd aangeroepen door b, dat deze werd aangeroepen door a, die op zijn beurt werd aangeroepen door de code in regel 15 (laatste) van het programma.

Programmeertalen

Veel programmeertalen, waaronder Java en C# , bieden native ondersteuning voor het ophalen van de huidige stacktracering via de juiste systeemaanroepen . C++ heeft hiervoor geen ingebouwde ondersteuning, maar C++-programmeurs kunnen stacktraces ophalen via speciale bibliotheken , zoals stacktrace . In JavaScript bevatten uitzonderingen een eigenschap met de naam stack(dus aanroepbaar als err.stack) die de stapel bevat vanaf het punt waarop deze werd gegooid; bovendien ondersteunen de meeste moderne browsers bellen console.trace();. [3]

Opmerkingen

  1. ^ Achtersporen | _ _ De GNU C-bibliotheek , op gnu.org . Ontvangen op 15 december 2020 .
  2. ^ Traceback - Druk een stacktraceback af of haal deze op , op docs.python.org . Ontvangen op 15 december 2020 .
  3. ^ Console.tracee ( ) - Web-API's § Browsercompatibiliteit , op developer.mozilla.org , MDN . Ontvangen op 15 december 2020 .

Gerelateerde items