PDA

Pogčedajte punu verziju : Debug PHP scriptova


bluesman
14. 11. 2005., 17:27
Kako radite debug?

Mislim na onaj naprostiji, slozeniji i najkomplikovaniji. Imate neke alate ili pichite sa echo, print_r(), var_dump() ?

srdjevic
14. 11. 2005., 18:12
Moj slucaj:

Za najprostije provere dok pisem kod koristim:
function dbg($var, $dontDie = false) {
echo '<pre>Vartype: ' . gettype($var) . "\n" . htmlentities( print_r($var, true) ) . '</pre>';
if ( !$dontDie ) exit;
}

A za prijavu gresaka imam error_handler-a koji pljuje (na ekran, u bazu, na mail, u xml, gde mu kazem, tj. kako ga podesim) var_dump, backtrace i sva cuda kojih sam mogao da se setim.

Petar Marić
14. 11. 2005., 20:39
IMHO, jedan od definitivno boljih metoda debugovanja php-a sam video kod Ilije.
Nešto jako slično gorepomenutom sistemu je danas dobio i django(primer 404 (http://toys.jacobian.org/django/404.html) i 500 (http://toys.jacobian.org/django/500.html) greške).

Ilija Studen
14. 11. 2005., 21:47
To što je Petar video je prikaz izuzetka koji nije uhvaćen (predviđen). U PHP5 se može definisati funkcija (pomoću set_exception_handler() (http://www.php.net/manual/en/function.set-exception-handler.php)) koja hvata te izuzetke i obrađuje ih (u suprotnom se dobije klasičan Fatal error). Moja implementacija te funkcije prikazuje informacije o izuzetku (fajl, linija, dodatna polja...), trace i stanje sistemskih promenljivih ($_GET, $_POST, $_SESSION, $_COOKIE...). Ništa revolucionarno, ali sam se preporodio kad sam to napravio...

Za "lokalizovanje" greške koristim die() i var_dump() (tačnije, varijaciju na isti, ali poenta nije bitnije izmenjena). Iako Zend Studio ima ugrađen debugger nisam se navikao na njega (nisam se preterano ni trudio). Čekićanje, ali radi posao...

dinke
15. 11. 2005., 10:13
echo i var_dump mostly, Zend Studio kad prigusti :)

oliver
15. 11. 2005., 20:51
function wtf($perosarin) {
echo "<pre>";
var_dump($perosarin);
echo "</pre>";
}


radi pos'o :)

bluesman
15. 11. 2005., 23:04
ja sam pravio neku funkciju bprint_f koja radi slično kao print_f sa tom razlikom što prikazuje tipove i veličine podaka pa sve u boji :)

output izgleda otprilike ovako:

'sms' [array 5]:
(
'instance': CH9229 [string 6]
'username': dad10065 [string 8]
'password': 7PfRv4kU [string 8]
'command' [array 2]:
(
0: WEBSUBSCRIBE [string 12]
'attr' [array 2]:
(
'a': name [string 4]
'status': ok [string 2]
)
)
'parameters' [array 4]:
(
'attr' [array 1]:
(
'b': sisa [string 4]
)
'receiver' [array 2]:
(
0: +41795657570 [string 12]
'attr' [array 1]:
(
'operator': swisscom [string 8]
)
)
'service': DADAMOBILE [string 10]
'operator': swisscom [string 8]
)
)


gura sve što mu poturiš, od bool pa do object. Naravno, u pitanju je rekurzija.

ivanhoe
17. 11. 2005., 12:39
debug_backtrace zna da bude koristan kad treba provaliti redosled kojim se stiglo do te tacke, recimo kad provaljujes tudj kod pa ti nije jasna logika...

a inace print_r i echo obicno odrade posao...