Terug naar hoofdinhoud
Debug in Joomla
Op deze pagina
# Topics

Debug in Joomla

30 juni 2026

Wanneer een Joomla-pagina een wit scherm toont, een verkeerde vertaling, of simpelweg te traag laadt, is gokken de traagste manier om de oorzaak te vinden. Joomla heeft een ingebouwd hulpmiddel dat gokken verandert in lezen: het laat je elke databasequery zien, elk geladen taalbestand, het gebruikte geheugen, de bestede tijd, en de waarschuwingen die PHP anders verbergt. Het heet Debugmodus, en de motor erachter is de Systeem - Debug-plugin (plg_system_debug).

De meeste beheerders kennen de Debugmodus als een enkele Ja/Nee-schakelaar in de Globale configuratie, en kijken nooit verder. Maar die schakelaar opent een complete diagnostische console onderaan elke pagina, een set opties die bepaalt wat er getoond wordt, en een ontwikkelaars-API om je eigen code te meten. Goed gebruikt is het de snelste manier om te begrijpen wat Joomla bij elk verzoek echt doet.

De schakelaar waarmee Joomla zichzelf uitlegt - elke query, elk bestand, elke milliseconde, onderaan de pagina uitgestald.

Dit artikel legt uit hoe de Debugmodus van Joomla echt werkt. Het behandelt de basis voor eigenaren en redacteuren, de instellingen voor beheerders en de technische details voor ontwikkelaars: waar de schakelaar zit, hoe de plugin de console rendert, wie hem mag zien, en waarom hij nooit aan mag blijven staan op een productiesite.

1. De basis

1.1 Wat is de Debugmodus?

De Debugmodus is een toestand die je inschakelt terwijl je een probleem onderzoekt. Met de modus uit (de normale toestand voor een live site) draait Joomla rustig en toont niets extra's. Met de modus aan verzamelt Joomla gedetailleerde informatie over hoe het de pagina heeft opgebouwd en toont die in een Debug-console - een donkere balk onderaan het scherm, met tabbladen die je kunt openen.

Er zijn twee aparte schakelaars, en ze doen verschillend werk:

  • Debug systeem - de hoofdschakelaar. Toont query's, profiling, geheugen, de verzoekgegevens, geladen plugins en PHP-waarschuwingen.
  • Debug taal - een smallere schakelaar voor vertalers. Markeert onvertaalde teksten en toont welke taalbestanden zijn geladen.

1.2 De twee onderdelen die het laten werken

De Debugmodus doet alleen iets als twee onderdelen het eens zijn:

  • De instelling in de Globale configuratie (debug en debug_lang), die Joomla vertelt dat je wilt debuggen.
  • De "Systeem - Debug"-plugin, die de gegevens daadwerkelijk verzamelt en de console tekent.

Staat de instelling aan maar is de plugin uitgeschakeld, dan verschijnt er niets. Is de plugin ingeschakeld maar staat de instelling uit, dan doet de plugin niets. Je hebt beide nodig. Paragraaf 3 legt de plugin in detail uit.

1.3 Waarom het belangrijk is

De Debugmodus beantwoordt de vragen die je van buitenaf niet kunt zien:

  • Waarom is deze pagina traag? De tabbladen query en profile tonen het trage deel.
  • Waarom is mijn tekst niet vertaald? Het taaltabblad markeert de ontbrekende tekst.
  • Waarom ging de pagina stuk? PHP-meldingen en -waarschuwingen, normaal verborgen, worden zichtbaar.

Het verandert "er is iets mis" in "deze query duurt 400 ms" of "deze taalsleutel ontbreekt". Dat is het verschil tussen een probleem oplossen en ernaar gokken.

1.4 Waar je het vindt

De schakelaars staan in de Globale configuratie:

Systeem -> Globale configuratie -> Systeem -> Debug-instellingen

De plugin staat in het pluginbeheer:

Systeem -> Beheren -> Plugins -> zoek "Debug" -> Systeem - Debug

Als beide aan staan en je een frontend- of backendpagina herlaadt, verschijnt de Debug-console onderaan.

Naar boven

2. De Debugmodus inschakelen

2.1 Het tabblad Debug-instellingen

Op Systeem → Globale configuratie → Systeem vind je de groep Debug-instellingen met drie velden:

VeldSleutelStandaardWat het doet
Debug systeem debug Nee (0) Schakelt de hoofd-Debug-console in.
Debug taal debug_lang Nee (0) Markeert vertalingen en toont taalbestanden.
Debug taalconstanten debug_lang_const Ja (1) Toont de constantennaam of de waarde ervan voor onvertaalde teksten. Alleen zichtbaar als Debug taal aan staat.

Zet Debug systeem op Ja, klik op Opslaan en herlaad een pagina. De console verschijnt - mits de plugin is ingeschakeld en je hem mag zien (paragraaf 6).

2.2 Foutrapportage hoort bij debuggen

De Debugmodus toont PHP-waarschuwingen, maar PHP genereert die alleen als de foutrapportage het toestaat. Het bijbehorende veld zit een tabblad verderop, op Systeem → Globale configuratie → Server:

FoutrapportageEffect
Systeemstandaard Laat het over aan de php.ini van de server.
Geen Verbergt alle PHP-meldingen.
Eenvoudig Toont fouten en waarschuwingen, verbergt notices.
Maximaal Toont alles, inclusief notices en deprecation-meldingen.

Als je een lastig probleem najaagt, zet je Foutrapportage op Maximaal samen met Debug systeem. Je ziet dan elke notice die PHP kan geven. Zet het terug op Systeemstandaard (of Geen) voordat je live gaat, zodat bezoekers nooit een kale PHP-fout zien.

2.3 Wat er gebeurt zodra de Debugmodus aangaat

Het inschakelen van debug verandert meer dan alleen de console. Joomla doet ook het volgende:

  • het definieert de constante JDEBUG als true, die het hele CMS controleert (paragraaf 7);
  • het start de Profiler van de applicatie, zodat tijdmarkeringen worden vastgelegd;
  • het zet GZIP-compressie uit voor het verzoek, zodat de console-HTML niet wordt weggecomprimeerd.

Daarom kan een debugpagina er iets anders uitzien en zich iets anders gedragen dan een normale. De Debugmodus is een diagnostische toestand, geen onzichtbare laag.

Naar boven

3. De "Systeem - Debug"-plugin

3.1 De plugin doet het echte werk

De instelling is slechts een vlag. De component die hem leest en de console opbouwt, is de "Systeem - Debug"-plugin, plg_system_debug, in de plugingroep system. Hij wordt met Joomla meegeleverd en staat standaard aan.

De plugin luistert naar verschillende applicatie-events. De twee belangrijkste zijn:

  • onAfterRespond - wordt geactiveerd nadat Joomla de respons heeft opgebouwd. De plugin verzamelt alle gegevens en injecteert de console net voor </body>.
  • onBeforeCompileHead - voegt de eigen CSS en JavaScript van de console toe aan de head van de pagina.

3.2 Het eerste wat de plugin controleert

Zodra de plugin laadt, controleert hij meteen of debuggen uberhaupt gewenst is:

// Sla de plugin helemaal over als beide schakelaars uit staan
if (!$debugLang && !$app->get('debug')) {
    return;
}

Als noch Debug systeem noch Debug taal aan staat, doet de plugin niets en kost hij vrijwel niets. Daarom is het op zichzelf ongevaarlijk om de plugin op een live site ingeschakeld te laten: zonder de instelling draait hij nooit.

3.3 De DebugBar-bibliotheek

De console die je ziet, wordt gerenderd door een bekende PHP-bibliotheek, PHP DebugBar, die met Joomla wordt meegeleverd onder media/vendor/debugbar/. Joomla voedt de bibliotheek met een set datacollectors - een per tabblad - en de bibliotheek tekent de balk en de panelen. Je bewerkt dit niet rechtstreeks; je bestuurt het via de plugin-opties.

Naar boven

4. De Debug-console lezen

Elk tabblad in de console wordt gevuld door een datacollector. Weten wat elk tabblad betekent verandert de balk van ruis in een kaart van het verzoek.

TabbladCollectorWat het je vertelt
Info InfoCollector Joomla-versie, PHP-versie, de request-id en een opmerking over redactie.
User UserCollector De huidige gebruiker en zijn groepen.
Memory MemoryCollector Piekgeheugen dat is gebruikt om de pagina op te bouwen.
Request RequestDataCollector GET-, POST-, cookie- en sessie-relevante verzoekgegevens.
Session SessionCollector De inhoud van de sessie-opslag.
Profile ProfileCollector Tijdmarkeringen van start tot eind, het hart van snelheidsanalyse.
Queries QueryCollector Elke databasequery, de tijd en hoe vaak hij draaide.
Log MessagesCollector Logberichten en deprecation-waarschuwingen die dit verzoek zijn verzameld.
Taaltabbladen Language*Collector Geladen taalbestanden, gebruikte teksten en vertaalfouten.

4.1 Het tabblad Queries is waar snelheidsproblemen zich verstoppen

Het tabblad Queries telt elke query en toont de duur. Twee patronen verraden in een oogopslag problemen:

  • Een hoog totaalaantal (honderden query's op een pagina) betekent meestal dat een extensie binnen een lus query's uitvoert. Dit is het klassieke "N+1"-probleem.
  • Een trage query die boven de rest uitsteekt, wijst op een ontbrekende index of een zware join.

Dezelfde query die vele malen wordt herhaald, wordt ook gemarkeerd, wat snel code blootlegt die de database steeds opnieuw om hetzelfde vraagt in plaats van het te cachen.

Als vuistregel draait een normale Joomla-pagina onder de honderd query's; een paar honderd is een teken om te onderzoeken, en enkele honderden betekent vrijwel altijd dat een extensie in een lus zit. Dit zijn geen harde grenzen - een complexe pagina heeft er terecht meer nodig - maar een plotselinge sprong in het aantal is een betrouwbaar waarschuwingssignaal.

4.2 Het tabblad Profile leest als een tijdlijn

Het tabblad Profile toont benoemde markeringen van het begin van het verzoek tot het eind - "afterInitialise", "afterRoute", "afterDispatch", "afterRender" en meer. De tijd tussen twee markeringen vertelt je welke fase traag is. Een grote sprong voor "afterRender" wijst op het template of de modules; een sprong rond "afterDispatch" wijst op de component die het werk doet.

4.3 Query Traces: ontdek wie een query afvuurde

Weten dat een query traag is, is maar het halve antwoord; je moet ook weten welke extensie hem uitvoerde. Schakel de optie Query Traces in (paragraaf 5.1) en elke query in het tabblad Queries krijgt een call stack - de keten van bestanden en methoden die ertoe leidde, bijvoorbeeld een modulehelper die loadObjectList() aanroept. Dit verandert "120 identieke categorie-query's" in "deze module zit in een lus", omdat de trace het verantwoordelijke bestand en de regel benoemt. Het is de snelste manier om een query toe te wijzen aan de extensie die hem bezit.

Naar boven

5. De plugin-opties

De Opties van de plugin (open de plugin en bekijk de tabbladen) bepalen precies wat de console toont. Ze zijn gegroepeerd in drie fieldsets.

5.1 Basis: de belangrijkste panelen

OptieStandaardBestuurt
Refresh Assets Ja Voegt bij elke herlaadbeurt een verse hash toe aan elk script en stylesheet, zodat de browser nooit een gecacht bestand serveert terwijl je werkt.
Allowed Groups (leeg) Welke gebruikersgroepen de console mogen zien. Leeg betekent iedereen (zie paragraaf 6).
Memory, Request, Session, Profiling, Queries Tonen Zet het bijbehorende tabblad aan of uit.
Query Traces / Query Profiles / Query Explains Verbergen Extra detail per query; alleen getoond als Queries aan staat.
Track Request History Uitgeschakeld Slaat de gegevens van elk verzoek op schijf op voor latere inspectie (zie paragraaf 11).

5.2 Query Explains: laat de database zichzelf uitleggen

Met Query Explains aan voert Joomla een EXPLAIN uit op elke select-query (op MySQL en PostgreSQL) en toont het resultaat in het tabblad Queries. Dit laat zien of de database een index gebruikte of de hele tabel doorzocht - de nuttigste aanwijzing wanneer een query traag is. Query Profiles gaat verder op MySQL, met SHOW PROFILE om een query in fasen op te splitsen, maar het vereist dat MySQL-profiling op de server is ingeschakeld.

5.3 Waarom Refresh Assets belangrijk is tijdens ontwikkeling

Normaal voegt Joomla een versie-hash toe aan CSS en JS zodat browsers ze veilig kunnen cachen. Terwijl je de CSS van een template bewerkt, werkt die cache tegen je - de browser houdt het oude bestand vast. Refresh Assets verandert de hash bij elke laadbeurt zodat je altijd je nieuwste wijziging ziet. Het staat standaard aan, juist omdat debuggen meestal het bewerken van frontendbestanden betekent.

Naar boven

6. Bepalen wie de Debugmodus ziet

6.1 De optie Allowed Groups

Standaard, als Debug systeem aan staat, ziet iedereen die de site bezoekt de console - inclusief anonieme bezoekers. Dat is prima op een lokale kopie en gevaarlijk op een openbare. De optie Allowed Groups (filter_groups) beperkt de console tot gekozen gebruikersgroepen.

De plugin controleert het zo:

$filterGroups = (array) $this->params->get('filter_groups', []);

if (!empty($filterGroups)) {
    $userGroups = $user->groups;

    // Toon debug alleen als de gebruiker in een van de toegestane groepen zit
    if (!array_intersect($filterGroups, $userGroups)) {
        return false;   // niet toegestaan - verberg de console
    }
}

Zet Allowed Groups op Super Users (of je ontwikkelaarsgroep) zodat normale bezoekers de console nooit zien, zelfs als debug per ongeluk aan blijft staan.

6.2 Gevoelige waarden worden geredigeerd

De console kan verzoek-, sessie- en configuratiegegevens tonen, waarvan sommige gevoelig zijn. De plugin redigeert automatisch sleutels die op geheimen lijken - wachtwoorden, tokens en dergelijke - voordat ze worden getoond. Het zoekpatroon dekt namen als password, passwd, secret, token en smtppass. Dit verkleint het risico, maar het is geen reden om te ontspannen: een console op een openbare site lekt nog steeds de structuur van query's, bestandspaden en versienummers die een aanvaller helpen.

Behandel de Debug-console als interne informatie. Beperk hem tot een vertrouwde groep en schakel de instelling uit zodra je klaar bent.

6.3 Een echt voorbeeld: het Debug-lek van 2022

Dit is geen theoretisch risico. Ik ben hier in 2022 zelf mee geconfronteerd, nadat een van mijn pas gelanceerde Joomla-sites was gehackt. Tijdens mijn onderzoek heb ik mijn bevindingen en analyse gedeeld met het Joomla Security Strike Team, dat de oorzaak van het probleem heeft achterhaald en de oplossing heeft geïmplementeerd die in Joomla 4.2.4 is uitgebracht.

Vóór Joomla 4.2.4 kon de debug-uitvoer gevoelige verzoekgegevens, waaronder de sessie van een ingelogde gebruiker en CSRF-tokens, blootstellen aan mensen die deze niet mochten zien. Een aanvaller die deze tokens leest, kan de sessie kapen en zich voordoen als die gebruiker. Het Joomla-project heeft dit gedocumenteerd als beveiligingsadvies 20221001 (CVE-2022-27912), "Disclosure of critical information in Debug Mode". Het had betrekking op Joomla 4.0.0 tot en met 4.2.3 en werd verholpen in de beveiligingsrelease Joomla 4.2.4.

De oplossing is precies de hierboven beschreven redactie: het patroon PROTECTED_COLLECTOR_KEYS is in 4.2.4 toegevoegd, zodat wachtwoord- en tokenachtige waarden worden gemaskeerd voordat de console ze weergeeft. Het is een duidelijke herinnering dat de veilige toestand niet “geredigeerde debug op een live site” is, maar “debug uitgeschakeld op een live site”.

Ik heb in het Joomla Community Magazine beschreven hoe een van mijn eigen Joomla 4-sites hierdoor werd getroffen en wat ik hiervan heb geleerd: Hoe mijn nieuwe Joomla 4-website werd gehackt.

Naar boven

7. Onder de motorkap: JDEBUG en de Query Monitor

7.1 De constante JDEBUG

Het hele CMS draait om een constante. Wanneer Joomla opstart, leest includes/framework.php de instelling en definieert hem:

if (!defined('JDEBUG')) {
    define('JDEBUG', $config->debug);
}

Vanaf dat moment kan elke code met een enkele, goedkope controle vragen of debuggen aan staat:

if (JDEBUG) {
    // Doe alleen in debugmodus extra diagnostisch werk
}

De core gebruikt dit om de profiler te starten, extra timing bij te houden en dat werk volledig over te slaan als debug uit staat. Je eigen extensie kan dezelfde constante gebruiken om tijdelijke diagnostiek toe te voegen die in productie niets kost.

7.2 Waar de instelling wordt opgeslagen

De twee schakelaars zijn gewone waarden uit de Globale configuratie, dus ze staan in configuration.php in de root van de site, niet in de database:

public $debug = '0';        // Debug systeem
public $debug_lang = '0';   // Debug taal
public $error_reporting = 'default';

Dit is van belang wanneer de backend onbereikbaar is. Als een wijziging je heeft buitengesloten en debug aan blijft staan, kun je dit bestand rechtstreeks bewerken en public $debug = '0'; instellen om de console uit te schakelen zonder in te loggen.

7.3 De Query Monitor

Het tabblad Queries wordt gevoed door een databasemonitor. Als debug aan staat, houdt de databasedriver van Joomla een monitor bij die elke query vastlegt, met de gebonden parameters en hoelang hij duurde. De plugin leest deze monitor aan het eind van het verzoek om het tabblad Queries op te bouwen. Schakel je het paneel Queries uit, dan verwijdert de plugin de monitor volledig, zodat het verzoek niet langer de kosten van het vastleggen van query's betaalt.

7.4 De events waar de plugin naar luistert

EventWaarom de plugin het gebruikt
onAfterRespond Alle gegevens verzamelen en de console in de HTML injecteren.
onBeforeCompileHead De CSS en JS van de console toevoegen en eventueel asset-versies wissen.
onBeforeRespond Een Server-Timing-header toevoegen op basis van de profiler-markeringen.
onAfterDisconnect EXPLAIN uitvoeren en query's profilen nadat de database de verbinding verbreekt.
onAjaxDebug Opgeslagen verzoekgeschiedenis serveren via AJAX (paragraaf 11).
Naar boven

8. Je eigen code profilen

8.1 Je eigen tijdmarkeringen toevoegen

Het tabblad Profile is niet beperkt tot core-markeringen. Elke code kan zijn eigen markeringen toevoegen via de Profiler van de applicatie. Elke markering legt de tijd en het geheugen vast sinds het verzoek begon:

use Joomla\CMS\Profiler\Profiler;

$profiler = Profiler::getInstance('Application');

$profiler->mark('mijnExtensie: voor zwaar werk');
$result = $this->doHeavyWork();
$profiler->mark('mijnExtensie: na zwaar werk');

Beide markeringen verschijnen in het tabblad Profile, en het gat ertussen is precies hoelang je zware werk duurde. Dit is de eenvoudigste manier om een vermoedelijk trage methode te meten zonder externe profiler.

8.2 De Server-Timing-header

Als profiling aan staat, schrijft de plugin de markeringen ook in een standaard Server-Timing-responsheader. De ontwikkelaarstools van je browser (het tabblad Netwerk) tonen dan dezelfde tijden bij het verzoek, zodat je ze kunt lezen zonder de console te openen. De rendertijd van modules en de tijd voor toegangscontroles worden opgeteld in eigen vermeldingen, waardoor een traag template makkelijk op te sporen is.

8.3 Gebruik de constante om dure diagnostiek af te schermen

Als je diagnostiek zelf duur is - een grote array dumpen, een trace opbouwen - wikkel het dan in de constante zodat het nooit in productie draait:

if (JDEBUG) {
    Log::add('Payload: ' . print_r($payload, true), Log::DEBUG, 'my-extension');
}

Zo blijft de live site snel terwijl je volledige details krijgt zodra je debug inschakelt.

8.4 Wanneer je Xdebug of een profiler erbij pakt

De Debug-console is een snelle eerste laag: hij vertelt je waar het probleem zit - een trage query, een zware plugin, een trage fase van het verzoek. Om de exacte PHP-regel daarachter te vinden, pak je een step-debugger zoals Xdebug, of een codeprofiler zoals Blackfire of Tideways. De werkwijze is om de Debug van Joomla naar de verdachte component of query te laten wijzen, en daarna het externe hulpmiddel te gebruiken om in te zoomen op de methode die het veroorzaakt. De twee lagen vullen elkaar aan; geen van beide vervangt de ander.

Naar boven

9. Logging en deprecation-waarschuwingen

9.1 Het tabblad Log

Met de optie Log aan (de standaard) verzamelt de console berichten die tijdens het verzoek via het logsysteem van Joomla zijn geschreven en toont ze in een tabblad Log, gekleurd op ernst. Hier verschijnen je eigen Log::add()-aanroepen, naast core-meldingen. Het bespaart je het openen van een logbestand om te zien wat er bij een enkele paginalaadbeurt gebeurde.

9.2 Deprecation-waarschuwingen

Joomla waarschuwt wanneer code een oude API gebruikt die in een toekomstige versie wordt verwijderd. Twee instellingen werken samen:

InstellingWaarEffect
Log Deprecated API Globale configuratie (log_deprecated) Legt deprecation-waarschuwingen uberhaupt vast.
Split Deprecated Core API Plugin-opties (log-deprecated-core) Scheidt waarschuwingen veroorzaakt door de Joomla-core van die veroorzaakt door extensies.

De scheiding is nuttig omdat hij de kernvraag beantwoordt: is de verouderde aanroep de schuld van mijn extensie, of van de core? Waarschuwingen uit /libraries/src worden gegroepeerd als "core", de rest als je eigen code. Los de waarschuwingen in je eigen code op; de core-waarschuwingen worden door Joomla-updates afgehandeld.

9.3 Waarom dit helpt voor een upgrade

Schakel Log Deprecated API in en blader met debug door je site voor een grote Joomla-upgrade. Elke deprecation-waarschuwing is een stuk code dat in de volgende versie kan stoppen met werken. Het nu oplossen, terwijl de oude API nog werkt, is veel makkelijker dan later een kapotte site repareren.

Naar boven

10. Taal debuggen

10.1 Wat Debug taal toont

Zet Debug taal op Ja en Joomla markeert vertaalde tekst op de pagina zodat je de staat van elke tekst kunt zien. Onvertaalde teksten springen eruit, en de console krijgt taaltabbladen die het volgende tonen:

  • Taalbestanden - elk .ini-bestand dat Joomla voor deze pagina heeft geladen.
  • Taalteksten - de sleutels die zijn gebruikt.
  • Taalfouten - sleutels zonder vertaling, of bestanden met syntaxfouten.

Dit is de snelste manier om een ontbrekende vertaling te vinden: de foute sleutel verschijnt op de pagina, en het taaltabblad vertelt je welk bestand hem zou moeten bevatten.

10.2 De markeringstekens

Vertaalde teksten worden op het scherm omgeven door markeringstekens. Een tekst met markeringen aan beide kanten is netjes vertaald; een tekst die als zijn ruwe constantennaam wordt getoond (zoals COM_EXAMPLE_HELLO) heeft helemaal geen vertaling. De optie Debug taalconstanten bepaalt of je voor zulke teksten de constantennaam of de terugvalwaarde ziet.

10.3 Lange voorvoegsels afkappen

Joomla-taalsleutels kunnen lang zijn. De taal-fieldset van de plugin-opties laat je een gemeenschappelijk voor- of achtervoegsel van de getoonde sleutel afkappen, en de optie Strip First Word verwijdert het eerste deel (vaak de naam van de extensie). Deze veranderen alleen hoe sleutels worden getoond in de console; ze raken je vertaalbestanden niet aan.

Naar boven

11. Debug, AJAX en verzoekgeschiedenis

11.1 Een console per verzoek

De Debug-console toont normaal het verzoek dat de pagina tekende. Maar veel acties gebeuren via AJAX, nadat de pagina is geladen, en die verzoeken hebben geen eigen console. De optie Track Request History lost dit op door de debug-gegevens van elk verzoek op te slaan zodat je ze later kunt openen.

11.2 Hoe het werkt

Met de optie aan schrijft de plugin de verzamelde gegevens van elk verzoek naar een bestand in de cachemap:

cache/plg_system_debug_site/        (of _administrator)

De console biedt dan een "open handler" die een eerder verzoek via AJAX ophaalt (index.php?option=com_ajax&plugin=debug&group=system) en de gegevens ervan toont. Zo kun je de query's en het profiel inspecteren van een AJAX-aanroep op de achtergrond die nooit een zichtbare balk had.

11.3 Een serieuze beveiligingswaarschuwing

Deze functie slaat ruwe verzoekgegevens op, en die gegevens kunnen wachtwoorden en geheime tokens bevatten in bestanden die iedereen met leestoegang tot de cachemap kan openen. De helptekst van Joomla zelf is er duidelijk over: schakel het slechts kort in, en wis na het uitschakelen de cache van de site zodat de opgeslagen bestanden worden verwijderd. Laat Track Request History nooit aan staan.

Naar boven

12. Webservices en de opdrachtregel

12.1 JDEBUG bestaat overal

De constante JDEBUG wordt gedefinieerd in elk ingangspunt - de site, de administrator, de API-applicatie en de CLI. Dezelfde instelling debug raakt ze dus allemaal. Op de opdrachtregel meldt de console van Joomla zelfs de debugstatus in de versieregel:

php cli/joomla.php --version
Joomla! 6.x.x (debug: No)

12.2 Geen Debug-console in JSON-responsen

De Debug-console is HTML, geinjecteerd voor </body>. Een webservices-verzoek geeft JSON terug, dat geen body-tag heeft, dus de plugin injecteert geen console in API-responsen - dat zou de JSON beschadigen. In plaats daarvan stapelt de plugin de gegevens intern op in plaats van ze te tonen wanneer er gegevens voor een niet-HTML-respons worden verzameld. In de praktijk betekent dit dat je de REST-API debugt via logs en de query monitor, niet via een zichtbare balk.

12.3 Geen REST-endpoint voor Debug

Er is geen /api/index.php/v1/-route om debuggen aan of uit te zetten. Debug is een configuratie- en diagnosekwestie, geen gegevens om via een API beschikbaar te stellen. Om het vanuit automatisering te wijzigen, bewerk je de instelling via de backend of, in een gecontroleerde deployment, de waarde debug in configuration.php.

12.4 Geen console bij geplande taken of CLI

De Debug-console bestaat alleen voor een HTML-paginaverzoek. De geplande taken en CLI-commando's van Joomla draaien zonder browserrespons, dus er is geen balk om te lezen - zelfs met debug aan. Als je een taak of een opdrachtregelcommando moet diagnosticeren, val je terug op de hulpmiddelen die geen pagina nodig hebben: schrijf naar het log met Log::add(), voeg Profiler::mark()-aanroepen toe om timing te meten, en zorg dat uitzonderingen worden opgevangen en gelogd. Hetzelfde geldt voor elk achtergrondwerk dat nooit HTML rendert.

Naar boven

13. SEO en prestaties

De Debugmodus heeft geen directe SEO-functie, maar hem in de verkeerde toestand laten staan heeft heel reele SEO- en prestatiekosten.

13.1 Debug aan in productie is een prestatiebug

Als debug aan staat, legt Joomla elke query vast, houdt extra profiling-gegevens bij, zet GZIP-compressie uit en plakt verse hashes aan assets zodat de browser ze niet kan cachen. Elk van deze maakt pagina's trager en zwaarder. Een live site met debug aan is meetbaar trager voor elke bezoeker en elke crawler, wat de Core Web Vitals schaadt en, indirect, de ranking.

13.2 De console kan crawlers bereiken

Als Allowed Groups leeg is en debug aan staat, wordt de console toegevoegd aan de HTML die zoekmachines crawlen. Dat is extra opmaak op elke pagina en, erger nog, een informatielek van paden en versies. Door de console tot een vertrouwde groep te beperken, houd je hem volledig uit de openbare pagina.

13.3 Gebruik Debug om prestaties te verbeteren, en zet het dan uit

De juiste manier om de Debugmodus voor SEO te gebruiken is indirect: zet hem aan, lees de tabbladen Queries en Profile, los de trage query of het zware template op, en zet hem uit. De console is een hulpmiddel om snelheidsproblemen te vinden, niet iets dat thuishoort op een live pagina.

Naar boven

14. Veelgemaakte fouten en valkuilen

14.1 Debug staat aan maar er verschijnt niets

Symptoom: Je hebt Debug systeem op Ja gezet maar er verschijnt geen console onderaan de pagina.

Oplossing: Controleer de plugin. De "Systeem - Debug"-plugin moet ingeschakeld zijn onder Systeem → Beheren → Plugins. Controleer ook Allowed Groups - staat daar een groep waar je niet in zit, dan is de console voor jou verborgen.

14.2 De console verschijnt op de live site voor iedereen

Symptoom: Bezoekers melden een vreemde donkere balk met technische gegevens onderaan de pagina.

Oplossing: Debug staat aan in productie met Allowed Groups leeg. Zet Debug systeem uit in de Globale configuratie. Stel als vangnet Allowed Groups in op Super Users zodat dit niet opnieuw kan gebeuren.

14.3 De site is traag nadat je iets "repareerde"

Symptoom: De hele site voelt trager aan dan voorheen, zonder duidelijke oorzaak.

Oplossing: Controleer of debug aan bleef staan. De Debugmodus schakelt GZIP en asset-caching uit en legt elke query vast. Zet debug terug op Nee en de snelheid keert terug.

14.4 Een witte pagina zonder fout

Symptoom: Een pagina is leeg en je kunt niet zien waarom.

Oplossing: Zet Debug systeem aan en stel Foutrapportage in op Maximaal. De verborgen PHP-fout die de lege pagina veroorzaakte, verschijnt nu en wijst naar het bestand en de regel.

14.5 Wachtwoorden zichtbaar in het tabblad Request

Symptoom: Je maakt je zorgen dat de console een inlogwachtwoord toont.

Oplossing: De plugin redigeert sleutels die op geheimen lijken, maar het veiligste antwoord is om de console nooit te draaien waar onvertrouwde mensen hem kunnen zien. Beperk Allowed Groups, en schakel Track Request History nooit in behalve voor een korte, begeleide test.

14.6 Vertalingen ogen prima met debug uit maar kapot met debug aan

Symptoom: Tekst toont vreemde markeringstekens eromheen.

Oplossing: Dat is Debug taal die zijn werk doet - de markeringen zijn hoe het de vertaalstaat toont. Zet Debug taal uit en de markeringen verdwijnen; ze worden nooit aan normale bezoekers getoond.

Naar boven

15. Best practices

Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:

  • Gebruik de Debugmodus om te diagnosticeren, en zet hem daarna uit. Hij hoort nooit lang op een live site te staan.
  • Zet Allowed Groups op Super Users (of je ontwikkelaarsgroep) zodat de console nooit aan bezoekers wordt getoond, zelfs niet per ongeluk.
  • Combineer Debug systeem met Foutrapportage: Maximaal bij het najagen van een lege pagina of een verborgen waarschuwing.
  • Lees het tabblad Queries voor het aantal query's en trage query's; zet Query Explains aan om ontbrekende indexen te zien.
  • Gebruik het tabblad Profile en je eigen Profiler::mark()-aanroepen om de trage fase van een verzoek te vinden.
  • Zet Log Deprecated API aan voor een grote upgrade en los de waarschuwingen van je extensie op.
  • Laat Track Request History nooit aan staan; het kan wachtwoorden op schijf opslaan. Wis de cache na gebruik.
  • Houd de "Systeem - Debug"-plugin ingeschakeld - hij is gratis als de instelling uit staat - maar bestuur alles via de schakelaar debug.
Naar boven

16. In het kort

SYSTEM DEBUG AANZETTEN  Systeem -> Globale configuratie -> Systeem -> Debug-instellingen -> Debug systeem = Ja
TAAL DEBUG AANZETTEN    zelfde tabblad -> Debug taal = Ja
FOUTRAPPORTAGE          Systeem -> Globale configuratie -> Server -> Foutrapportage = Maximaal
DE PLUGIN               Systeem -> Beheren -> Plugins -> Systeem - Debug
BEPERK WIE HEM ZIET     Systeem - Debug-plugin -> Opties -> Allowed Groups = Super Users

INSTELLINGEN (configuration.php)
  debug             0 uit / 1 aan   (definieert JDEBUG)
  debug_lang        0 uit / 1 aan
  error_reporting   default / none / simple / maximum
  log_deprecated    log verouderde API-aanroepen

CONSOLE-TABBLADEN
  Info Profile Queries Memory Request Session User Log  + taaltabbladen

BELANGRIJKE PLUGIN-OPTIES
  filter_groups          wie de console mag zien (leeg = iedereen)
  queries                toon het tabblad Queries
  query_traces           voeg een call stack toe aan elke query (benoemt de boosdoener)
  query_explains         voer EXPLAIN uit op select-query's
  refresh_assets         breek asset-cache bij elke herlaadbeurt
  log-deprecated-core    splits core- en extensie-deprecations
  track_request_history  sla verzoeken op schijf op (RISICOVOL - uit)

CODE
  Staat debug aan? if (JDEBUG) { ... }
  Tijdmarkering    Profiler::getInstance('Application')->mark('label')
  Afgeschermd log  if (JDEBUG) Log::add($msg, Log::DEBUG, 'my-ext')

CLI
  Toon debugstatus php cli/joomla.php --version   ->  (debug: No)
Naar boven

17. Samenvatting

De Debugmodus van Joomla is de ingebouwde manier om het CMS te laten uitleggen wat het doet:

  • Twee schakelaars in de Globale configuratie - Debug systeem (debug) en Debug taal (debug_lang) - zetten hem aan.
  • De "Systeem - Debug"-plugin leest die schakelaars en rendert de Debug-console met een tabblad per datacollector: queries, profile, memory, request, session, log en taal.
  • De constante JDEBUG draagt de toestand naar elk onderdeel van het CMS, zodat de core en je eigen code alleen bij debuggen extra werk doen.
  • Allowed Groups houdt de console weg bij bezoekers; gevoelige sleutels worden geredigeerd, maar de console blijft interne informatie.
  • Ontwikkelaars profilen hun eigen code met Profiler::mark(), lezen queryplannen met Query Explains, en bereiden upgrades voor met deprecation-logging.
  • De Debugmodus schakelt GZIP en asset-caching uit, dus hij vertraagt de site en mag nooit aan blijven staan in productie.

Zodra je de Debugmodus ziet als een diagnostische toestand in plaats van een enkele knop, houdt de console op een muur van getallen te zijn en wordt hij een helder rapport: zoveel query's, zoveel tijd hier, deze tekst onvertaald, deze API verouderd. Als je site traag, leeg of met de verkeerde tekst verschijnt, is debug een paar minuten aanzetten vrijwel altijd de snelste weg naar de echte oorzaak - en weten hoe je leest wat het je vertelt, is een van de vaardigheden die gokken onderscheidt van echte Joomla-probleemoplossing.

Naar boven
Debug in Joomla
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.