PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

 Skriptid (427) 

 Bannerisüsteemid
 E-kaardid
 E-maili saatmine
 E-poed
 Failihaldus
 Flash ja PHP
 Foorumid
 Jututoad
 Kalendrid
 Kalkulaatorid
 Kellad
 Klikilugejad
 Kommentaarid
 Külalisteraamatud
 Küsitlused
 Lehe turvamine
 Lingikogud
 Mängud
 Otsingusüsteemid
 Pildid ja PHP
 Shoutboxid
 Sisuhaldussüsteemid
 Statistika
 Suunamine
 Templeidisüsteemid
 Testid
 Uudised
 Uudistelistid
 Varia


 Otsing 

 

 Utiliidid 

 Kes on kus
 Kasutajate info
 Küsitlused
 PHP manuaal
 Õpetused
 Jututuba
 Lingikogu
 Lemmikskriptid


 Debugeerimine ehk silumine
Autor: muidumeez
Kolmapäev, 06. august 2003 17:13
Debugeerimine ehk silumine

Programmide kirjutamisel tekib kahte sorti vigu: süntaksi vead ja loogikavead. Esimestega aitab võidelda kompilaator või interpretaator,
loogikavigadega on lood teised. Sest juba Murphy väidab, et rogramm ei tee seda, mida te tahate, vaid seda, mida te käsite.
Kui programm ei tee seda, mida te tahate, siis oleks vaja jälgida, mis ja kuidas toimub, oleks vaja programmi siluda.
Paljud keeled sisaldavad enda IDE-t (Integrated Development Environment) mis sisaldab nn Debuger'it.
PHP on selles mõttes huvitav keel, et tal puudub ühtne IDE, skripte kirjutatakse erinevates tekstiredaktorites, erinevates operatsioonisüsteemides, PHP-l puudub ühtne ja tunnustatud Debugger. Mitmed tekstiredaktorid võimaldavad seda teha, aga tihtipeale on selle seadistamine tülikas, või on tegu tasulise tarkvaraga.

Aga mida siis teha?

Asja illustreerimiseks teeme ühe pisikese ülesande. Oletame, et mul on vaja teha päring andmebaasist, samuti oletame et tabelid ja kasutatavad väljad on olemas, andmebaasiühendus on püsti.
PHP kood:


$paring mysql_query("select * from tabel where id='$id'");


Ja nüüd selgub, et tulemust ei ole või on tulemus vale. Hakkame siis lahkama ülesannet nii, et me saaks aru, mis toimub.

Esiteks, püüame aru saada, mida me siiski pärime
PHP kood:


$paringu_string "select * from tabel where id='$id'";
$paring mysql_query($paringu_string);


Seega saame me eraldi muutuja, mis fikseerib meile olulise päringu. Nüüd vaatame, mida see endast kujutab
PHP kood:


$paringu_string "select * from tabel where id='$id'";
echo 
$paringu_string;
$paring mysql_query($paringu_string);


Tulemuseks kuvatakse ekraanile päringustring.
Järgmisena võiks seda teadet natuke ilustada, eriti, kui selliseid teateid on mitmeid. No näiteks nii:
PHP kood:


$paringu_string "select * from tabel where id='$id'";
echo 
"<p>Päring on : <font color=red>$paringu_string</font></p>";
$paring mysql_query($paringu_string);


Kui selliseid teateid on palju, siis oleks mõistlik teha vastav funktsioon:
PHP kood:



function debugteade($teade,$prefix="Päring on")
{
echo 
"<p>$prefix: <font color=red>$teade</font></p>";
}

$paringu_string "select * from tabel where id='$id'";
debugteade($paringu_string);
$paring mysql_query($paringu_string);


Nüüd aga tekib probleem, et kui programm töötab, siis oleks vaja veateated välja lülitada. Sellisel juhul on hea just funktsiooni omada.
PHP kood:



# Variant 1

function debugteade($teade,$prefix="Päring on")
{
# echo "<p>$prefix: <font color=red>$teade</font></p>";
}

# Variant 2

function debugteade($teade,$prefix="Päring on")
{
return;
echo 
"<p>$prefix: <font color=red>$teade</font></p>";
}


# Variant 3

function debugteade($teade,$prefix="Päring on")
{
}



Veel üks võimalus on kasutada konstanti, mis näitab, kas toimub debugteadete väljastamine või mitte.
PHP kood:



define("is_Debug","1");

function 
debugteade($teade,$prefix="Päring on")
{
if (
is_Debug)
echo 
"<p>$prefix: <font color=red>$teade</font></p>";
}


Selline variant on hea, kui kasutatakse keerukamat süsteemi, kus on mitmeid inkluude ja palju funktsionaalsust.
Teate sisuks võib olla mitesuguseid muutujaid, kaasa arvatud massiive. Sellisel juhul võib natuke täiendada funktsiooni:
PHP kood:


function debugteade($teade,$prefix="Päring on")
{
if (
is_Debug)
if (
is_array($teade))
print_r($teade);
else
echo 
"<p>$prefix: <font color=red>$teade</font></p>";
}


Nüüd aga laiendame seda funktsiooni veel. Nimelt kogume teated kokku ja kuvame need korraga.
PHP kood:



$debug_massiiv array();

function 
debugteade($teade,$prefix="Päring on",&$teatemassiiv)
{
if (
is_Debug)

if (
is_array($teade))
$teatemassiiv[] = $teade;
else
$teatemassiiv[] = "<p>$prefix: <font color=red>$teade</font></p>";
}


function 
valjastateated($teatemassiiv)
{
?>
<table border=1 width="100%">
<tr><th>Nr</th><th>Sisu</th></tr>
<?
foreach ($teatemassiiv as $key => $value)
{
echo 
"<tr><td>$key</td><td>";
if (
is_array($value)) print_r($value); else echo $value;
echo 
"</td></tr>\n";
}
?>
</table>
<?

}

$paringu_string "select * from tabel where id='$id'";
debugteade($paringu_string,"Päring on : ",$debug_massiiv);
$paring mysql_query($paringu_string);


valjastateated($debug_massiiv);




Edasi on juba teie fantaasia, kuidas te asjale lähenete.



Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2019 PHP Center. Kõik õigused reserveeritud.