Tråden för tips i samband med felsökning

PHPportalen Forum Index » PHP
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
ziggamon



Medlem i: 6176 dagar

Status: Offline



#108787
Inlägg Skrivet: 2003-12-16 18:35      Ämne: Tråden för tips i samband med felsökning Citera

Hej! Alltför ofta har man läst (och tyvärr även skrivit) inlägg av typen "jag får felmeddelande blabla, vad är fel?" och så bifogar man koden.

Jag tänkte härmed en gång för alla dra igång en tråd där alla kan dela med sig av sina bästa felsökningstips. Förhoppningsvis kommer den upp i wikin en dag också =)

Här kommer då mina. kom gärna med egna tips eller synpunkter.

1. Kommentera bort saker om man är osäker på en rad, eller ett stycke, och misstänker att det felar kan man ju enkelt kommentera bort hela, köra koden, testa om det funkar. Blir det ingen skillnad ligger inte felet i det stycket och du kan koncentrera dig på andra. Ligger felet där så får du kommentera bort delar av det, osv.

2. Skriva ut variabler Ett vanligt fel i PHP är att variabler stavats fel, eller skickats fel, eller inte är nåbara från vissa funktioner etc. En bra felsökningsmetod är att lägga in echo $variabel; för att se om den finns.
En annan sak som är vanlig är att en mysql-query blir felaktig, och ger ett mysql-fel. Detta testas enkelt med echo $query;

3. Skriva ut villkorssatsers resultat om man har en enorm 100-raders if/else-sats, som bara inte funkar är det lättare att ta reda på vad som händer om man lägger till en textrad som meddelar resultatet. Krångligt? jag ska illustrera

PHP:
1:
<?php
2:
if($apa == $kossa){
3:
echo "apa är kossa";
4:
//kod som gör saker här
5:
}
6:
elseif($apa == $snigel){
7:
echo "apa är snigel";
8:
// kod här
9:
}
10:
?>


förstår ni?


Nu till SQL, där felen ofta är många och sällan ger bra felmeddelanden.

4. Dela upp queries Klipp upp din query i mindre bitar och kör dem en i taget. Program som PhpMyAdmin är bra för ändamålet då man bara vill se om det funkar eller inte.





Nu är jag klar. kom gärna med synpunkter/kritik osv.

MVH
Ziggamon[/list][/b]
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande ICQ-nummer
md2perpe
Ex-Moderator



Medlem i: 6052 dagar
Från: Hallonbergen, Kungsbodarna
Status: Offline



#108977
Inlägg Skrivet: 2003-12-17 00:53      Ämne: Citera

Bra tips! (Som jag iofs redan använder)

En annan rekommendation är att använda indentering, vilket gör det lättare att läsa hela koden, men framför allt att se om slutklamrar (}) har placerats korrekt.
 

_________________
6 + sqrt(64) = 10
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
ziggamon



Medlem i: 6176 dagar

Status: Offline



#108980
Inlägg Skrivet: 2003-12-17 00:56      Ämne: Citera

Kom på en till grej: syntax highlighting - markerar ibland om man glömt avsluta strängar o så...
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande ICQ-nummer
Malte
in memoriam 1



Medlem i: 6396 dagar
Från: Tingsryd
Status: Offline



#109185
Inlägg Skrivet: 2003-12-17 16:12      Ämne: Citera

Det första man bör göra för felsökning är att koppla på alla felmeddelande.

Följande inställningar i php.ini:
KOD:
1:
error_reporting = E_ALL
2:
 
3:
display_errors = On


Har man inte tillgång till php.ini så lägger man följande överst i sina skript man vill felsöka:
KOD:
1:
<?php
2:
 
3:
error_reporting(E_ALL);
4:
ini_set("display_errors", "1");
 

_________________
Funktion är vackert
Till toppen på sidan
Visa användarprofil Besök användarens hemsida
hagman
Ex-Moderator



Medlem i: 6388 dagar
Från: Luvlieluspie
Status: Offline



#109188
Inlägg Skrivet: 2003-12-17 16:20      Ämne: Citera

Kör man en egen server så kan man kolla i Apaches log filer.

på min burk:

/var/log/apache
- access_log
- error_log
 

_________________
haggeluring
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
MangeB



Medlem i: 6069 dagar
Från: Stockholm
Status: Offline



#111317
Inlägg Skrivet: 2003-12-22 16:58      Ämne: Citera

En väldigt grov metod som jag använder ibland är att jag i slutet av det nya kodblocket sätter ut "*/". Sen så sätter jag ut en "/*" i början av det och provar att köra. Funkar det? Då har jag gjort ett fel i det nya kodblocket (vanligast). Om det inte funkar så har något med den gamla koden blivit fel också.
Sen så flyttar jag ner "/*" rad efter rad tills jag löst alla problem i det nya blocket.

Självklart så kan man inte bara kommentera ut på detta vis:
PHP:
1:
<?php
2:
$apa "gris";
3:
$bondgård[] = $apa;
4:
if($bondgård[0] == $apa) {
5:
/*    echo "Grisen är det första djuret!";
6:
} else {
7:
    echo "Grisen var inte först...";
8:
}
9:
*/
10:
?>

Då blir det ju bara parse-error. Beroende av hur koden är vid dessa tillfällen så får man göra olika saker. Jag brukar då bara se till att } kommer med, utanför kommentaren:
PHP:
1:
<?php
2:
$apa "gris";
3:
$bondgård[] = $apa;
4:
if($bondgård[0] == $apa) {
5:
/*    echo "Grisen är det första djuret!";
6:
} else {
7:
    echo "Grisen var inte först...";
8:
*/
9:
}
10:
/*
11:
*/
12:
?>
 

_________________
01001110 01110101 00100000 01110110 01100001 01110010 00100000 01100100 01110101 00100000 01100100 01110101 01101011 01110100 01101001 01100111 00101110 00100000 00111010 00101101 00101001
Till toppen på sidan
Visa användarprofil Skicka privat meddelande ICQ-nummer
the_jonas



Medlem i: 6165 dagar

Status: Offline



#111462
Inlägg Skrivet: 2003-12-22 21:27      Ämne: Citera

Jag brukar kolla i apaches error log välldigt ofta, även när sidorna ser ut att funka felfritt. Indentering är välldigt viktigt imho. Bra tips i denna tråd, men jag tror/hoppas att de allra allra flesta här kan dem redan.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida ICQ-nummer
Wedge
Administratör



Medlem i: 6234 dagar
Från: Järfälla
Status: Offline



#111470
Inlägg Skrivet: 2003-12-22 22:02      Ämne: Citera

Ofta ser man if-satser som innebär tilldelning, eftersom kodaren glömt att skriva dubbla likhetstecken. Alltså
KOD:
1:
if ($variabel = 123 ) ...

Såna fel kan vara trixiga att finna.
Väldigt, väldigt ofta jämför man variabelvärde med en konstant stäng eller ett konstant tal, så mitt lilla bidrag till tipssamling är: Vänd på steken.
Koda
KOD:
1:
if (123 == $variabel) ...

Glömmer ni att skriva dubbla likhetstecken (jämförelseoperatorn) så får ni hjälp av PHP här, som skriker högt eftersom man inte kan tilldela en konstant ett nytt värde ... Smile
 

_________________
I am Groot
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
hagman
Ex-Moderator



Medlem i: 6388 dagar
Från: Luvlieluspie
Status: Offline



#111476
Inlägg Skrivet: 2003-12-22 22:23      Ämne: Re: Tråden för tips i samband med felsökning Citera

ziggamon skrev:
2. Skriva ut variabler Ett vanligt fel i PHP är att variabler stavats fel, eller skickats fel, eller inte är nåbara från vissa funktioner etc. En bra felsökningsmetod är att lägga in echo $variabel; för att se om den finns.
En annan sak som är vanlig är att en mysql-query blir felaktig, och ger ett mysql-fel. Detta testas enkelt med echo $query;


Jag brukar använda mig av var_dump i stället för echo, den ger mer information och fungerar även på arrayer.

Kräk ut massor av variabler på skärmen.
KOD:
1:
var_dump(get_defined_vars())


get_defined_functions
get_defined_constants
 

_________________
haggeluring
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic