Debugger

Door No One, 12 jaar geleden, 5.113x bekeken

Met dit script kun je debuggen zonder iets op de server te moeten installeren.

gebruik: zoals je elke static class gebruikt.. dus Debug::function();

mogelijke functies:
Debug::log(); registreerd de functie die debug::log() aanroept (je krijgt dus een lijst met aangeroepen functies, uitgebreider dus dan debug_backtrace();)
Debug::output(boolean); print alle informatie uit zoals $_GET $_POST en $_SESSION; een boolean kan meegegeven worden om de output van $_SESSION te beperken.
Debug::addDebuggerIp(array); hierin geef je een array met ip's op van de debugger. in dat geval word de output alleen geprint als de website aangeroepen worden vanaf de in die array staande ip addressen.

Gesponsorde koppelingen

PHP script bestanden

  1. class.debug.php

 

Er zijn 11 reacties op 'Debugger'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Roel -
Roel -
12 jaar geleden
 
0 +1 -0 -1
Ik zou dit alleen wel beveiligen met bijvoorbeeld een wachtwoord. :-)
SilverWolf NL
SilverWolf NL
12 jaar geleden
 
0 +1 -0 -1
Een paar opmerkingen:

-Meestal wil je niet dat je error uberhaupt kan tonen. Ik zou het dus eerder wegschrijven naar een file, of naar de log van PHP zelf.
-In je klasse laat je de data op een specifieke manier weergeven. De weergave vind ik echter niet in deze klasse thuishoren, ik zou bij output dus een associative array teruggeven met alle data, dan kan de gebruiker zelf ervoor kiezen hoe die getoont wordt.
-Waarom haal je de documentroot weg? Deze informatie wordt niet voor niets al getoont, hij is best wel nuttig.
Niels K
Niels K
12 jaar geleden
 
0 +1 -0 -1
ik mis de methode getInstance( ).
Ik neem aan dat je er een singleton van wou maken?

plus

- Mis PHPDoc
- Vind het niet overzichtelijk
- Te lange methodes

Kijk anders een naar Zend_Debug. Of die helemaal goed is weet ik niet. Maar over het algemeen zijn producten van Zend goed dus.
No One
No One
12 jaar geleden
 
0 +1 -0 -1
dan beveilig je toch de Debug::output() commando met een wachtwoord? net als je zou doen met bv phpinfo(); je bent niet verplicht om IP's op te geven.

@silverwolf: bedoeling hiermee is dat je tijdens development je website kan debuggen...persoonlijk vind ik dat ik dan zo weinig stappen moet ondernemen om dergelijke data geprint te krijgen...de documentroot maakt het minder leesbaar en doorgaans ken je de documentroot ook wel...althans in applicaties die ik tot nog toe gebouwd heb...daarbij heb ik als developer geen zin om een eigen output te moeten schrijven nog voor dat ik aan mijn eigen applicatie te moeten beginnen...

@niels: waarom zou je een singleton maken?? include class.debug.php helemaal bovenaan en je kan overal Debug::log(); en op het eind output aanroepen.

wat is er lang aan de methodes?? oké de output methode is een beetje lang, de rest valt wel mee toch? bedoel gebruik van korte syntax bijvoorbeeld...of maakte dat de code juist onoverzichtelijk?
Pieter van Linschoten
Pieter van Linschoten
12 jaar geleden
 
0 +1 -0 -1
Hey Henze, Ga eens slapen! ;)

Maar om tot je reactie te komen: als je die document root onoverzichtelijk vind, waarom doe je het niet als volgt:

Bovenaan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
private static $root;
?>


En in je constructor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
public static function __construct(){
    self::$root = $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR;
}

?>


En dan overal uiteraard self:$root gebruiken in plaats van die document root.

PS:
Ik wil van niemand verhaaltjes over overbodige variabelen vermijden horen, want dit is om te debuggen.

Hoe overzichtelijker je data, hoe meer je weet. Hoe sneller je een probleem kan oplossen.

Truste!


12 jaar geleden
 
0 +1 -0 -1
Ik zie niet echt in waarom ik dit script zou gebruiken i.p.v. var_dump. Vind var_dump toch wel wat handiger.
Als ik een backtrace nodig heb (wat ik bijna nooit heb, ligt dat aan mij?) dan dump ik die wel.
Pieter van Linschoten
Pieter van Linschoten
12 jaar geleden
 
0 +1 -0 -1
Hehehe. Of foutloos programmeren. Dan heb je dit ook niet nodig :')
Niels K
Niels K
12 jaar geleden
 
0 +1 -0 -1
@Karl

Ik gebruik altijd print_r met daarom heen een <pre>. Maar sinds kort heb ik mezelf verdiept in de source van php en ben nu aan het proberen dat als je print_r of var_dump kiest dat er dan direct een <pre> omheen wordt gezet. Maar dat is eventjes heel wat anders dan php:)
Pieter van Linschoten
Pieter van Linschoten
12 jaar geleden
 
0 +1 -0 -1
@Niels
Hmm, dat kan je ook zo doen ;)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
function print_pre($array,$return = false){
    $debug = '<pre>'.print_r($array,true).'</pre>';
    if($return == true){
        return $debug;
    }
else{
        print $debug;
    }
}

?>
Pim -
Pim -
12 jaar geleden
 
0 +1 -0 -1
Of gewoon Xdebug installeren, heb je dat en meteen schattige kleurtjes ;) (naast alle andere debug-mogelijkheden)

Verder:
addDebuggerIp() hoort setDebuggerIps() te zijn, aangezien je niets toevoegt, maar instelt.

array_push() wordt meestal niet gebruikt.

Ik zou over basename() eerst even een realpath() gooien.

Van output() kan je ook een cli/plaintext versie maken.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niels K
Niels K
12 jaar geleden
 
0 +1 -0 -1
Daar geef ik je helemaal gelijk in Pim. Als we Xdebug niet hadden. En in netbeans kan je dat als plugin nog eens netjes inladen ook:)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. class.debug.php

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.