Debugging
Finch heeft een ingebouwde debugger die gedetailleerde foutpagina's weergeeft in de ontwikkelomgeving.
Debugger inschakelen
Twee instellingen zijn vereist:
// In lib/app.dart
FinchConfigs(
enableLocalDebugger: true, // Instelling 1: debugger inschakelen
)
// In bin/finch.dart
FinchApp.run(
app: App(),
isLocalDebug: true, // Instelling 2: uitvoeren in lokale debugmodus
)
Beide instellingen moeten true zijn om foutpagina's voor debugging weer te geven.
Hoe isLocalDebug wordt berekend
Doorgaans wordt isLocalDebug gelezen uit een omgevingsvariabele:
FinchApp.run(
app: App(),
isLocalDebug: env.get('APP_ENV') == 'local',
)
Op die manier kun je de debugger uitschakelen door APP_ENV=production in te stellen bij deployment.
Sjabloonvariabele
In Jinja-sjablonen is isLocalDebug beschikbaar:
{% if isLocalDebug %}
<div class="debug-bar">
Omgeving: Ontwikkeling | Versie: {{ appVersion }}
</div>
{% endif %}
Terminalpaneel
Wanneer de app wordt gestart met finch serve (niet met een gewone dart run), opent de CLI een WebSocket-server op --terminalPort (standaard 8282) die de stdout/stderr van het draaiende proces streamt. Het tabblad Terminal van de debugbalk maakt automatisch verbinding met deze poort, zodat je serverlogs en console-uitvoer kunt bekijken zonder naar het terminalvenster te wisselen, en vanuit de browser opdrachten terug kunt sturen naar het draaiende proces.
# Aangepaste terminalpoort gebruiken
finch serve --terminalPort 9000
Dit werkt alleen via finch serve, aangezien dat het proces is dat de app opstart en FINCH_TERMINAL_PORT in de omgeving ervan zet. Als je de app rechtstreeks met dart run uitvoert, blijft het tabblad Terminal niet verbonden.
DartDevTools-paneel
finch serve start de app ook met --enable-vm-service=8181/0.0.0.0 --disable-service-auth-codes, waardoor de Dart VM-service aan alle interfaces wordt gebonden (niet alleen localhost), zodat deze ook vanuit een Docker-container bereikbaar blijft. De debugbalk bevat een tabblad DevTools dat verbinding maakt met deze VM-service op poort 8181, en biedt zo geheugen-, prestatie- en logweergaven van de draaiende app rechtstreeks in de browser.
Als je Finch in Docker draait, zorg er dan voor dat de poorten 8181 en 8282 samen met de app-poort worden gepubliceerd — zie Docker for Finch.
Foutpagina's
Wanneer de debugger is ingeschakeld:
- Onverwerkte fouten tonen een volledige stacktrace in de browser
- 404- en 500-fouten tonen informatieve, overzichtelijke pagina's
- Verzoekgegevens (headers, params, body) zijn zichtbaar
In productiemodus (isLocalDebug: false):
- Generieke foutpagina's worden aan gebruikers getoond
- Stacktraces worden gelogd op de console, niet in de browser