PHP-Scripts debuggen met NetBeans IDE
zoals u al weet, wanneer iemand code schrijft in een taal op hoog niveau zijn er twee soorten fouten die hij of zij kan maken-syntaxisfouten en logische fouten. NetBeans IDE biedt alle benodigde tools om u te helpen uw scripts te debuggen en de fouten te vinden.
foutopsporing syntaxfouten
Gelukkig detecteert NetBeans IDE syntaxfouten terwijl u typt en onderstreept ze met een golvende rode lijn Zoals weergegeven in Figuur 1.
figuur 1 in de NetBeans IDE worden syntaxisfouten onderstreept met een golvende rode lijn
het enige wat u hoeft te doen is de corresponderende fout corrigeren en de rode lijn verdwijnt meteen. Als u echter niet zeker weet wat er mis is met uw code, kunt u gewoon uw muiscursor op het Rode uitroepteken plaatsen. NetBeans IDE zal proberen om u te helpen door het tonen van een pop-up venster met een korte uitleg van de fout, zoals weergegeven in Figuur 2.
Figuur 2 de NetBeans IDE toont een uitleg van een syntaxfout
foutopsporing logische fouten door scripts stap voor stap
uit te voeren vergeleken met syntaxfouten zijn logische fouten moeilijker te vinden. Omdat de NetBeans IDE logische fouten niet kan herkennen en onderstrepen, bent u helemaal alleen! Laten we eens kijken naar het volgen van PHP script, bijvoorbeeld. Het vraagt de gebruiker om twee nummers in te voeren en berekent en geeft hun som. Het bevat echter een logische fout!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
als u dit script typt in de NetBeans IDE, zult u merken dat er niet eens één uitroepteken is dat een fout aangeeft. Als je het script uitvoert (SHIFT + F6), echter, en twee waarden invoert, 5 en 2, kun je zelf zien dat, hoewel de som van 5 en 2 7 is, NetBeans IDE erop staat dat het nul is, zoals weergegeven in Figuur 3.
Figuur 3 het resultaat bekijken van een logische fout in het uitvoervenster
Wat is er aan de hand? Natuurlijk zou het voor een deskundige programmeur een fluitje van een cent zijn om deze fout te corrigeren. Maar voor jou, een beginner, ook al doe je je best, vind je niets verkeerd. Dus, waar is de fout?
soms worden menselijke ogen zo moe dat ze het voor de hand liggende niet kunnen zien. Dus, laten we proberen om wat magie te gebruiken! Laten we proberen om het script stap voor stap uit te voeren met behulp van de debugger. Dit geeft u de mogelijkheid om de stroom van de uitvoering te observeren en neem een kijkje op de huidige waarden van variabelen in elke stap.
Start de debugger door “Debug →
Debugbestand” te selecteren in het hoofdmenu of door op de toetsencombinatie CTRL+SHIFT+F5 te drukken. Door dit te doen, schakelt u de debugger in en meer pictogrammen worden weergegeven op de werkbalk.
let op: om de debugger (XDebug) in te schakelen, moet u de PHP wijzigen.ini file. Meer informatie vindt u hier.
de programmateller (de groene pijl pictogram in de grijze marge) stopt op de eerste regel van het script zoals weergegeven in Figuur 4.
Figuur 4 met behulp van de debugger in de NetBeans IDE
let op: de programmateller toont u, op elk gewenst moment, welke opdracht het volgende is dat moet worden uitgevoerd.
klik op het pictogram” stap in ” op de werkbalk. Deze actie vertelt de PHP interpreter om de opdracht $s = 0
uit te voeren, en de programmateller gaat naar de tweede PHP-opdracht, die de volgende is die moet worden uitgevoerd.
selecteer in het hoofdmenu “Window →
Debugging →
Variables”. In het venster dat verschijnt, kunt u kijken naar alle variabelen gedeclareerd in het hoofdgeheugen (RAM) en de waarde die ze bevatten tijdens elke stap van de uitvoering. Tot nu toe is de enige gedeclareerde variabele die een waarde heeft gekregen de variabele $s
zoals weergegeven in Figuur 5.
Figuur 5 de waarde van variabele $s wordt weergegeven in het Variables venster van de debugger
klik nogmaals op het “Step into” werkbalkpictogram. De tweede verklaring wordt uitgevoerd. Ga terug naar het” Output ” venster en zie het output resultaat (zie Figuur 6).
Figuur 6 het bekijken van een prompt in het uitvoervenster
klik opnieuw op het “Step into” werkbalkpictogram. Het derde PHP statement wordt uitgevoerd en het programma Wacht tot je een waarde invoert. Plaats de cursor in het” Output “venster, typ de waarde 5, en druk op de” Enter ↵ ” toets.
de programmateller gaat naar het vierde PHP statement. Als u teruggaat naar het venster” variabelen ” kunt u zien dat op dit moment twee variabelen ($a
en $s
) worden gedeclareerd in het hoofdgeheugen (RAM), zoals weergegeven in Figuur 7.
Figuur 7 de waarden van de variabelen $a en $s worden weergegeven in het Variabelenvenster
klik tweemaal op het “Step into” werkbalkpictogram. Deze actie voert de vierde en vijfde PHP statements uit. Plaats de cursor in het” Output “venster, typ de waarde 2, en druk op de” Enter ↵ ” toets.
de programmateller gaat naar het zesde PHP statement. Als je teruggaat naar het” Variables ” venster kun je zien dat op dit moment drie variabelen ($a, $b
en $s
) gedeclareerd worden in het hoofdgeheugen (RAM) zoals getoond in Figuur 8.
Figuur 8 de waarden van de variabelen $a, $b
en $s
worden weergegeven in het Variabelenvenster
klik nogmaals op het” Step into ” werkbalkpictogram. De verklaring $S = $a + $b
wordt uitgevoerd. Wat u hier verwachtte was de som van 5 en 2, dat is 7, toe te wijzen aan variabele $s
. In plaats daarvan wordt een nieuwe variabele $S
gedeclareerd in het hoofdgeheugen (RAM) en wordt de waarde 7 toegewezen, zoals weergegeven in Figuur 9.
figuur 9 Alle gedeclareerde variabelen worden weergegeven in het Variables venster van de debugger
nu wordt het duidelijker voor u! U hebt ten onrechte twee variabelen in het hoofdgeheugen (RAM) gedeclareerd, de variabele $s
en de variabele $S
met een hoofdletter S. Dus als de uitvoerstroom naar het laatste statement gaat, wordt echo "The sum is: ", $s
de waarde 0 in plaats van de waarde 7 weergegeven.
u heeft zojuist de fout gevonden! Klik op het” Finish Debugger Session ” werkbalk icoon om de uitvoering te annuleren, corrigeer de fout door variabele $S
te veranderen naar $s
, en je bent klaar! Je hebt net je eerste foutopsporing uitgevoerd! Voer het script opnieuw uit en je zult nu zien dat het de som correct berekent en weergeeft.
foutopsporing logische fouten door het toevoegen van breekpunten
foutopsporing stap voor stap heeft een groot nadeel. U moet keer op keer op het “Step into” werkbalkpictogram klikken totdat u de positie bereikt waar de fout zich zou kunnen bevinden. Kun je je voorstellen dat je dit in een groot script doet?
voor grote scripts is er een andere aanpak. Als u vermoedt dat de fout ergens aan het einde van het script is, is het niet nodig om alles vanaf het begin te debuggen. U kunt een marker (genaamd een “breekpunt”) waar je denkt dat de fout zou kunnen zijn toe te voegen, het script uit te voeren en wanneer de stroom van uitvoering bereikt dat breekpunt, de stroom van uitvoering zal automatisch pauzeren. U kunt dan een kijkje nemen op de huidige waarden van de variabelen op de positie waar het script werd gepauzeerd.
let op: wanneer het script pauzeert, hebt u twee opties om de uitvoering te hervatten: u kunt een tweede breekpunt ergens onder in het script toevoegen, op het “Continue” werkbalkpictogram klikken en het script toestaan door te gaan met de uitvoering tot dat nieuwe breekpunt; of u kunt gewoon het “Step into” werkbalkpictogram gebruiken en daarna het script stap voor stap uitvoeren.
het volgende PHP script vraagt de gebruiker om twee waarden in te voeren en berekent hun gemiddelde waarde.
het script bevat echter een logische fout. Wanneer de gebruiker de waarden 10 en 12 invoert, wordt de waarde 16, in plaats van 11, weergegeven.
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
u vermoedt dat het probleem zich ergens aan het einde van het script bevindt. U wilt echter niet het hele script debuggen, maar alleen het gedeelte waarin de fout zou kunnen zijn. Laten we dus proberen een breekpunt toe te voegen aan het $average = $a + $b / 2
statement (zie Figuur 10). Er zijn twee manieren om dit te doen: u kunt klikken in de linker grijze marge op het overeenkomstige regelnummer, of u kunt de cursor op de regel van belang plaatsen en op de toetsencombinatie Ctrl+F8 drukken.
Figuur 10 een breekpunt toevoegen aan een script
let op: u weet dat er een breekpunt is ingesteld wanneer de roze rechthoek in de grijze marge verschijnt en de corresponderende regel een roze achtergrond heeft die het markeert.
druk op CTRL + SHIFT + F5 om de debugger te starten. Klik op het” Continue ” werkbalkpictogram en voer de waarden 10 en 12 in indien gewenst. U zult merken dat net nadat u het tweede nummer in te voeren en druk op de “Enter ↵” toets, de stroom van uitvoering pauzeert op het breekpunt. (U zult zien dat de roze breakpoint highlighting wordt vervangen door de groene accentuering van de programmateller.)
onthoud! U kunt een bestand debuggen door “Debug
→
Debug bestand” te selecteren in het hoofdmenu of door op de toetsencombinatie CTRL+SHIFT+F5 te drukken.
nu kunt u de huidige waarden van de variabelen nader bekijken. Variabelen $a
en $b
bevatten respectievelijk de waarden 10 en 12, zoals ze zouden moeten, dus er is niets mis met de gegevensinvoer, zoals weergegeven in Figuur 11.
Figuur 11 het bekijken van de huidige waarden van twee variabelen in het Variabelenvenster
Klik eenmaal op het “Step into” werkbalkpictogram. De statement $average = $a + $b / 2
voert uit en het hoofdgeheugen (RAM) bevat nu de volgende waarden (zie Figuur 12).
Figuur 12 het bekijken van de huidige waarden van drie variabelen in het Variabelenvenster
daar is het! Je hebt zojuist de verklaring gevonden die foutief een waarde van 16 in plaats van 11 toekent aan de variabele $average
! En nu komt het moeilijke deel; je moet overwegen waarom dit gebeurt!
na twee dagen nadenken wordt het duidelijk! U was net vergeten $a + $b
tussen haakjes te plaatsen; dus alleen de variabele $b
werd gedeeld door 2. Klik op het” Finish Debugger Session ” werkbalk icoon, verwijder alle breekpunten, corrigeer de fout door $a + $b
tussen haakjes te plaatsen en je bent klaar! Voer het script opnieuw uit en zie nu dat het de gemiddelde waarde correct berekent en weergeeft.