← Alle posts
Een foutpagina die je de exacte regel vertelt, niet een gok.

Een foutpagina die je de exacte regel vertelt, niet een gok.

Een stacktrace door gecompileerde of getranspileerde code is een bekend soort onhandigheid: het regelnummer is echt, maar het wijst naar gegenereerde output die niemand met de hand heeft geschreven, verschillende stappen verwijderd van de bron die je eigenlijk moet bekijken. De foutpagina's van Phlo wijzen in plaats daarvan naar de bron, omdat de parser dat mogelijk maakt door zijn constructie.

Waarom dit überhaupt werkt

De regelgebaseerde parser (geen AST, behandeld in een eerdere post) betekent dat regel N in een .phlo-bestand direct overeenkomt met een bekende regel in de gegenereerde PHP. Dat is geen debugfunctie die er achteraf aan is toegevoegd, het komt rechtstreeks voort uit hoe de compiler werkt: omdat er geen complexe tokenisatie stap is die de structuur herschikt, blijft de mapping van bronregel naar uitvoerregel eenvoudig genoeg om vast te leggen en te gebruiken.

Wat je daadwerkelijk ziet

Een productie-fout toont een korte, citeerbare 8-teken referentie-id, zowel op de foutpagina die een gebruiker ziet als in de JSON of async payload die een frontend-aanroep terugkrijgt. Dezelfde id wordt gelogd naar data/errors.json met de echte details: welk .phlo-bestand, welke regel, wat de uitzondering was. Een gebruiker rapporteert de id, een ontwikkelaar zoekt ernaar, en de exacte fout is daar, zonder dat er "welke aanvraag, ongeveer wanneer, waarschijnlijk in dat ene gebied" moet worden gereconstrueerd vanuit een vage beschrijving.

static errorPage($code, $id, $msg = null) => DOM('<main class="oops"><h1>Something broke.</h1><p>Reference: '.$id.'</p></main>')

De foutpijplijn is ook recursiebeschermd: als de renderer zelf of een aangepaste errorPage een fout gooit, valt het terug op een afhankelijkheidsvrije blote pagina in plaats van in een tweede fout te belanden bovenop de eerste.

Dieper, wanneer je het nodig hebt

Voor gevallen waarin de referentie-id alleen niet voldoende uitleg biedt, geeft de trace-modus (trace: true in het dev entrypoint) request-niveau tracing: elke aanroep van een gegenereerde methode, prop getter of native helper wordt gelogd met timing en argumenten naar data/trace/<id>.json, leesbaar vanuit het Trace-tabblad van het Phlo Control Center. Dat is het escalatiepad; meestal zijn het bestand, de regel en de referentie-id voldoende om direct naar de oplossing te gaan; trace is er voor wanneer de fout te maken heeft met volgorde en timing in plaats van een enkele gebroken regel.

De gemeenschappelijke draad

Dit is dezelfde ontwerpkeuze die overal op deze site naar voren komt: minder lagen tussen het ding dat kapot is en de persoon die het probeert te repareren, of die persoon nu een ontwikkelaar aan een terminal is of een agent die dezelfde fout programmatisch leest.

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.