Πώς μπορείτε να διορθώσετε PHP scripts;

ψήφοι
405

Πώς μπορείτε να διορθώσετε PHP scripts;

Γνωρίζω τις βασικές εντοπισμού σφαλμάτων, όπως τη χρήση της αναφοράς σφαλμάτων. Το σημείο διακοπής εντοπισμού σφαλμάτων στο PHPEclipse είναι επίσης πολύ χρήσιμο.

Ποια είναι η καλύτερη (από άποψη γρήγορο και εύκολο) τρόπος για να διορθώσετε το phpStorm ή οποιοδήποτε άλλο IDE;

Δημοσιεύθηκε 04/08/2008 στις 00:18
πηγή χρήστη
Σε άλλες γλώσσες...                            


30 απαντήσεις

ψήφοι
145

Προσπαθήστε Eclipse PDT να στήσετε ένα περιβάλλον Eclipse που έχει debugging δυνατότητες, όπως αναφέρατε. Η ικανότητα να μπω στον κώδικα είναι ένας πολύ καλύτερος τρόπος για να διορθώσετε, στη συνέχεια, την παλιά μέθοδο της var_dump και να εκτυπώσετε σε διάφορα σημεία για να δείτε πού ροή σας πάει στραβά. Όταν όλα τα άλλα αποτύχουν αν και το μόνο που έχω είναι SSH και vim εξακολουθώ var_dump()/ die()για να βρείτε όπου ο κώδικας πηγαίνει νότια.

Απαντήθηκε 04/08/2008 στις 00:28
πηγή χρήστη

ψήφοι
80

Μπορείτε να χρησιμοποιήσετε Firephp ένα add-on για το Firebug για τον εντοπισμό σφαλμάτων php στο ίδιο περιβάλλον με javascript.

Χρησιμοποιώ επίσης Xdebug αναφέρθηκε προηγουμένως για προφίλ php.

Απαντήθηκε 05/08/2008 στις 18:22
πηγή χρήστη

ψήφοι
38

Αυτό είναι κάτι περιβάλλον debug μου:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}
Απαντήθηκε 29/06/2009 στις 14:40
πηγή χρήστη

ψήφοι
32

Xdebug και το plugin ΗΤΑΕ για το Notepad ++ για τα βαρέα κυνήγι σφάλμα καθήκον, FirePHP για ελαφριά πράγματα. Γρήγορα και βρώμικα? Τίποτα δεν κτυπά dBug .

Απαντήθηκε 15/09/2008 στις 21:23
πηγή χρήστη

ψήφοι
26

XDebug είναι απαραίτητη για την ανάπτυξη. Έχω να το εγκαταστήσετε πριν από κάθε άλλη επέκταση. Σας δίνει στοίβα ίχνη σε οποιοδήποτε λάθος και μπορείτε να ενεργοποιήσετε εύκολα προφίλ.

Για μια γρήγορη ματιά σε χρήση δομή δεδομένων var_dump(). Μην χρησιμοποιείτε print_r()γιατί θα πρέπει να το περιβάλλουν με <pre>και τυπώνει ένα μόνο var κάθε φορά.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Για ένα πραγματικό περιβάλλον εντοπισμού σφαλμάτων το καλύτερο που έχω βρει είναι Komodo IDE αλλά κοστίζει $$.

Απαντήθηκε 22/08/2008 στις 16:43
πηγή χρήστη

ψήφοι
19

PhpEd είναι πραγματικά καλό. Μπορείτε να μπείτε στο / πάνω / των λειτουργιών. Μπορείτε να εκτελέσετε κώδικα ad-hoc, ελέγξτε τις μεταβλητές, οι μεταβλητές αλλαγή. Είναι απίστευτο.

Απαντήθηκε 05/02/2009 στις 10:16
πηγή χρήστη

ψήφοι
17

1) Χρησιμοποιώ print_r (). Σε TextMate, έχω ένα απόσπασμα για την «προ» που επεκτείνεται σε αυτό:

echo "<pre>";
print_r();
echo "</pre>";

2) Μπορώ να χρησιμοποιήσω Xdebug, αλλά δεν ήταν σε θέση να πάρει το GUI για να λειτουργήσει σωστά στο Mac μου. Είναι τουλάχιστον εκτυπώνει μια αναγνώσιμη έκδοση του ίχνους στοίβας.

Απαντήθηκε 07/08/2008 στις 01:25
πηγή χρήστη

ψήφοι
16

Με κάθε ειλικρίνεια, ένας συνδυασμός εκτύπωσης και print_r () για να εκτυπώσετε τις μεταβλητές. Ξέρω ότι πολλοί προτιμούν να χρησιμοποιούν άλλες πιο προηγμένες μεθόδους, αλλά θεωρώ αυτό το πιο εύκολο στη χρήση.

Θα πω ότι δεν είχα εκτιμήσει πλήρως αυτό μέχρι Έκανα κάποια προγραμματισμού με μικροεπεξεργαστή σε Uni και δεν ήταν σε θέση να χρησιμοποιήσουν ακόμη και αυτό.

Απαντήθηκε 04/08/2008 στις 22:28
πηγή χρήστη

ψήφοι
16

Έχω χρησιμοποιήσει το Zend Studio (5,5) , μαζί με Zend Platform . Αυτό δίνει την κατάλληλη διόρθωση, σημεία παύσης / αναβάθμιση μέσω του κώδικα κλπ, αν και σε τιμή.

Απαντήθηκε 04/08/2008 στις 00:20
πηγή χρήστη

ψήφοι
14

Xdebug , από Derick Rethans, είναι πολύ καλό. Το χρησιμοποίησα πριν από λίγο καιρό και διαπίστωσε ότι δεν ήταν τόσο εύκολο να εγκαταστήσετε. Μόλις τελειώσετε, δεν θα καταλάβετε πώς θα καταφέρει χωρίς αυτό :-)

Υπάρχει ένα καλό άρθρο σχετικά με Zend προγραμματιστή Ζώνη (εγκατάσταση σε Linux δεν φαίνεται καθόλου ευκολότερο) και ακόμη και ένα plugin του Firefox , η οποία ποτέ δεν χρησιμοποιείται.

Απαντήθηκε 04/08/2008 στις 22:07
πηγή χρήστη

ψήφοι
11

Χρησιμοποιώ Netbeans με XDebug και το Easy XDebug Firefox add-on

Το add-on είναι απαραίτητο κατά τον εντοπισμό σφαλμάτων προγράμματα MVC, επειδή ο κανονικός τρόπος XDebug τρέχει σε Netbeans είναι η καταγραφή συνεδρία dbug μέσω του url. Με το πρόσθετο εγκατεστημένο στο FireFox, θα ορίσετε Netbeans ιδιότητες του έργου σας -> Run configuratuion -> Για προχωρημένους και επιλέξτε «Μην ανοίγετε περιήγησης στο Web» Τώρα μπορείτε να ρυθμίσετε τα σημεία διάλειμμα και να αρχίσει η συνεδρία εντοπισμού σφαλμάτων με Ctrl-F5, ως συνήθως, . Ανοίξτε το Firefox και κάντε δεξί κλικ στο Add-on εικονίδιο στην κάτω δεξιά γωνία για να ξεκινήσει η παρακολούθηση για σημεία διακοπής. Όταν ο κώδικας φτάσει στο σημείο διακοπής θα σταματήσει και θα μπορείτε να επιθεωρήσει μεταβλητή κράτη σας και καλέστε-stack.

Απαντήθηκε 09/07/2010 στις 04:14
πηγή χρήστη

ψήφοι
11

Χρησιμοποιώ Netbeans με XDebug. Check it out στην ιστοσελίδα της για docs για το πώς να το ρυθμίσετε. http://php.netbeans.org/

Απαντήθηκε 26/08/2008 στις 16:04
πηγή χρήστη

ψήφοι
10

buffering εξόδου είναι πολύ χρήσιμο εάν δεν θέλετε να χαλάσουν εξόδου σας. Το κάνω αυτό σε ένα σκάφος της γραμμής που μπορώ να σχολιάσω / αποσχολιάστε κατά βούληση

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
Απαντήθηκε 22/10/2008 στις 10:16
πηγή χρήστη

ψήφοι
9

PHPEdit έχει ένα ενσωματωμένο στο πρόγραμμα εντοπισμού σφαλμάτων, αλλά συνήθως καταλήγουν να χρησιμοποιούν echo ()? και print_r ()? ο παλιός τρόπος !!

Απαντήθηκε 17/09/2008 στις 11:14
πηγή χρήστη

ψήφοι
8

Για τα πραγματικά λιθίαση προβλήματα που θα ήταν πολύ χρονοβόρο να χρησιμοποιήσετε print_r / echo για να καταλάβω μπορώ να χρησιμοποιήσω (PhpEd) τον εντοπισμό σφαλμάτων χαρακτηριστικό IDE μου. Σε αντίθεση με άλλες IDEs που έχω χρησιμοποιήσει, PhpEd απαιτεί λίγο πολύ δεν εγκατάστασης. ο μόνος λόγος που δεν το χρησιμοποιούν για τυχόν προβλήματα που αντιμετωπίζουν είναι ότι είναι οδυνηρά αργή. Δεν είμαι σίγουρος ότι η βραδύτητα είναι ειδικά για PhpEd ή οποιοδήποτε php πρόγραμμα εντοπισμού σφαλμάτων. PhpEd δεν είναι δωρεάν, αλλά πιστεύω ότι χρησιμοποιεί ένα από τα προγράμματα εντοπισμού σφαλμάτων ανοικτού κώδικα (όπως XDebug αναφέρθηκε προηγουμένως) έτσι κι αλλιώς. Το όφελος με PhpEd, πάλι, είναι ότι δεν απαιτεί εγκατάσταση που έχω βρεθεί πραγματικά πολύ κουραστικό στο παρελθόν.

Απαντήθηκε 22/08/2008 στις 16:33
πηγή χρήστη

ψήφοι
4

Εγχειρίδιο εντοπισμού σφαλμάτων είναι γενικά πιο γρήγορα για μένα - var_dump()και debug_print_backtrace()είναι όλα τα εργαλεία που χρειάζεστε για να οπλίσει τη λογική σας.

Απαντήθηκε 22/08/2008 στις 16:36
πηγή χρήστη

ψήφοι
3

Χρησιμοποιώ συχνά CakePHP όταν Rails δεν είναι δυνατή. Για να διορθώσετε τα λάθη που συνήθως βρίσκουν το error.logστο φάκελο tmp και η ουρά είναι στο τερματικό με την εντολή ...

tail -f app/tmp/logs/error.log

Θα δώσει το τρέχετε διαλόγου από την τούρτα για το τι συμβαίνει, το οποίο είναι αρκετά βολικό, αν θέλετε να εμφανίσετε κάτι για να το μέσα του κώδικα που μπορείτε να χρησιμοποιήσετε.

$this->log('xxxx');

Αυτό συνήθως μπορεί να σας δώσει μια καλή ιδέα για το τι συμβαίνει / λάθος.

Απαντήθηκε 10/05/2010 στις 10:29
πηγή χρήστη

ψήφοι
3

Λοιπόν, σε κάποιο βαθμό εξαρτάται από όπου τα πράγματα πάνε νότια. Αυτό είναι το πρώτο πράγμα που προσπαθώ να απομονώσει και στη συνέχεια θα χρησιμοποιήσω echo / print_r () ανάλογα με τις ανάγκες.

Σημείωση: Εσείς ξέρετε ότι μπορείτε να περάσετε αλήθεια ως ένα δεύτερο επιχείρημα για να print_r () και θα επιστρέψει την έξοδο αντί να τα εκτυπώνει; Π.χ:

echo "<pre>".print_r($var, true)."</pre>";
Απαντήθηκε 18/09/2008 στις 04:17
πηγή χρήστη

ψήφοι
2

Υπάρχουν πολλές τεχνικές PHP εντοπισμού σφαλμάτων που μπορεί να σε σώσει αμέτρητες ώρες όταν κωδικοποίησης. Μια αποτελεσματική αλλά βασική τεχνική εντοπισμού σφαλμάτων είναι απλά για να ενεργοποιήσετε την αναφορά σφαλμάτων. Μια άλλη ελαφρώς πιο προηγμένη τεχνική περιλαμβάνει τη χρήση δηλώσεις εκτύπωσης, η οποία μπορεί να βοηθήσει να εντοπίσουμε πιο ασαφές σφάλματα, εμφανίζοντας το τι πραγματικά συμβαίνει στην οθόνη. PHPeclipse είναι ένα Eclipse plug-in που μπορεί να αναδείξει κοινά σφάλματα σύνταξης και μπορεί να χρησιμοποιηθεί σε συνδυασμό με ένα πρόγραμμα εντοπισμού σφαλμάτων για να ορίσετε σημεία διακοπής.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

και χρησιμοποιείται επίσης

error_log();
console_log();
Απαντήθηκε 01/10/2015 στις 11:16
πηγή χρήστη

ψήφοι
2

NuSphere είναι επίσης ένα καλό πρόγραμμα εντοπισμού σφαλμάτων για την PHP NuSphere

Απαντήθηκε 29/05/2012 στις 13:43
πηγή χρήστη

ψήφοι
2

Komodo IDE λειτουργεί καλά με xdebug, ακόμη και για το debugging remore. Χρειάζεται ελάχιστο ποσό της ρύθμισης. Το μόνο που χρειάζεστε είναι μια έκδοση της php που Komodo μπορούν να χρησιμοποιήσουν τοπικά στο βήμα μέσω του κώδικα σε ένα σημείο διακοπής. Αν έχετε το σενάριο που εισάγονται στην Komodo έργου, τότε μπορείτε να ορίσετε σημεία διακοπής με ένα κλικ του ποντικιού ακριβώς πώς θα το ρυθμίσετε μέσα έκλειψη για τον εντοπισμό σφαλμάτων ένα πρόγραμμα java. Απομακρυσμένο εντοπισμό σφαλμάτων είναι προφανώς πιο δύσκολο να το πάρει για να λειτουργήσει σωστά (ίσως χρειαστεί να αντιστοιχίσετε το τηλεχειριστήριο url με ένα php script στο χώρο εργασίας σας) από μια τοπική εγκατάσταση εντοπισμού σφαλμάτων που είναι αρκετά εύκολο να ρυθμίσετε, εάν είστε σε ένα MAC ή επιτραπέζιο linux .

Απαντήθηκε 22/08/2008 στις 16:44
πηγή χρήστη

ψήφοι
2

print_r (debug_backtrace ())?

ή κατι τετοιο :-)

Απαντήθηκε 04/08/2008 στις 00:32
πηγή χρήστη

ψήφοι
1

PHP DBG

Η Διαδραστική Stepthrough PHP Debugger εφαρμοστεί ως μονάδα SAPI που μπορεί να δώσει σας δώσει τον πλήρη έλεγχο του περιβάλλοντος, χωρίς να επηρεάζουν τη λειτουργικότητα ή την απόδοση του κωδικού σας. Στόχος του είναι να είναι ένα ελαφρύ, ισχυρό, εύκολο στη χρήση πλατφόρμα εντοπισμού σφαλμάτων για την PHP 5.4+ και είναι αποστέλλονται out-of-box με PHP 5.6.

Χαρακτηριστικά περιλαμβάνει:

  • Stepthrough εντοπισμού σφαλμάτων
  • Ευέλικτη Όρια ευαισθησίας (Class μέθοδος, Λειτουργία, Αρχείο: Γραμμή, Διεύθυνση, Opcode)
  • Εύκολη πρόσβαση σε PHP με ενσωματωμένο eval ()
  • Εύκολη πρόσβαση με το παρόν εκτέλεση κώδικα
  • userland API
  • SAPI Agnostic - Εύκολα Ολοκληρωμένη
  • PHP Διαμόρφωση Υποστήριξη αρχείων
  • ΚΟΕ Σούπερ Globals - Ρυθμίστε τη δική σας !!
  • Προαιρετικά Readline Υποστήριξη - Άνετα Terminal Λειτουργίας
  • Απομακρυσμένη εντοπισμού σφαλμάτων Υποστήριξη - Πακέτο Java GUI
  • εύκολη λειτουργία

Δείτε τις εικόνες:

PHP DBG - Stepthrough εντοπισμού σφαλμάτων - screenshot

PHP DBG - Stepthrough εντοπισμού σφαλμάτων - screenshot

Αρχική σελίδα: http://phpdbg.com/

PHP Error - Βελτίωση της αναφοράς σφαλμάτων για την PHP

Αυτό είναι πολύ εύκολο στη χρήση της βιβλιοθήκης (στην πραγματικότητα ένα αρχείο) για τον εντοπισμό σφαλμάτων PHP script σας.

Το μόνο πράγμα που χρειάζεται να κάνετε είναι να συμπεριλάβετε ένα αρχείο ως κατωτέρω (στην αρχή σχετικά με τον κωδικό σας):

require('php_error.php');
\php_error\reportErrors();

Στη συνέχεια, όλα τα σφάλματα θα σας δώσει πληροφορίες όπως backtrace, πλαίσιο κώδικα, τα επιχειρήματα της λειτουργίας, οι μεταβλητές server, κ.λπ. Για παράδειγμα:

PHP σφάλματος |  Βελτίωση της αναφοράς σφαλμάτων για την PHP - screenshot της backtrace PHP σφάλματος |  Βελτίωση της αναφοράς σφαλμάτων για την PHP - screenshot της backtrace PHP σφάλματος |  Βελτίωση της αναφοράς σφαλμάτων για την PHP - screenshot της backtrace

Τα χαρακτηριστικά γνωρίσματα περιλαμβάνουν:

  • ασήμαντο στη χρήση, είναι απλά ένα αρχείο
  • σφάλματα που εμφανίζονται στο πρόγραμμα περιήγησης για κανονικές και ajaxy αιτήματα
  • Τα αιτήματα AJAX παύση, η οποία σας επιτρέπει την αυτόματη εκ νέου τη διαχείρισή τους
  • κάνει λάθη τόσο αυστηρή όσο το δυνατόν (ενθαρρύνει την ποιότητα κώδικα, και τείνει να βελτιώσει τις επιδόσεις)
  • της δημιουργίας ενός κώδικα σε ολόκληρο το ίχνος στοίβας
  • παρέχει περισσότερες πληροφορίες (όπως το πλήρες υπογραφές λειτουργία)
  • διορθώνει κάποια μηνύματα λάθους που είναι απλά λάθος
  • τονισμό σύνταξης
  • φαίνεται αρκετά!
  • προσαρμογή
  • ενεργοποιήστε το χέρι και να σβήνουν
  • εκτελέσετε συγκεκριμένες ενότητες, χωρίς αναφορά σφαλμάτων
  • αγνοούν τα αρχεία που σας επιτρέπει να αποφευχθεί η επισήμανση κώδικα σε στοίβα ίχνος σας
  • αρχεία εφαρμογών? αυτά είναι προτεραιότητα όταν μια απεργίες λάθος!

Αρχική σελίδα: http://phperror.net/

GitHub: https://github.com/JosephLenton/PHP-Error

Πιρούνι μου (με επιπλέον διορθώσεις): https://github.com/kenorb-contrib/PHP-Error

DTrace

Αν το σύστημά σας υποστηρίζει DTrace δυναμικής ανίχνευσης (εγκατεστημένο από προεπιλογή σε OS X) και PHP σας έχει συνταχθεί με τους ανιχνευτές DTrace να ενεργοποιήσετε ( --enable-dtrace), η οποία θα πρέπει να είναι εξ ορισμού, η εντολή αυτή μπορεί να σας βοηθήσει να εντοπίσετε σφάλματα PHP script με το χρόνο:

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Έτσι, δίνεται η ακόλουθη ψευδώνυμο έχει προστεθεί σε σας RC αρχεία (π.χ. ~/.bashrc, ~/.bash_aliases):

alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'

μπορεί να εντοπίσει το σενάριό σας με εύκολο να θυμάστε ψευδώνυμο: trace-php.

Εδώ είναι πιο προχωρημένο σενάριο dtrace, απλά να το αποθηκεύσετε σε dtruss-php.d, να το κάνετε εκτελέσιμο ( chmod +x dtruss-php.d) και εκτελέστε:

#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d

#pragma D option quiet

php*:::compile-file-entry
{
    printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}

php*:::compile-file-return
{
    printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}

php*:::error
{
    printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::exception-caught
{
    printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::exception-thrown
{
    printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::execute-entry
{
    printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::execute-return
{
    printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::function-entry
{
    printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return
{
    printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::request-shutdown
{
    printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

php*:::request-startup
{
    printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

Αρχική σελίδα: dtruss-λάμπα στο GitHub

Εδώ είναι απλή χρήση:

  1. Εκτέλεση: sudo dtruss-php.d.
  2. Σε ένα άλλο τερματικό τρέχει: php -r "phpinfo();".

Για να ελέγξετε αυτό, μπορείτε να πάτε σε οποιοδήποτε docroot με index.phpκαι να τρέξει PHP ενσωματωμένο διακομιστή:

php -S localhost:8080

Μετά από αυτό μπορείτε να έχετε πρόσβαση στην τοποθεσία http: // localhost: 8080 / (ή να επιλέξετε ό, τι το λιμάνι είναι βολικό για εσάς). Από εκεί πρόσβαση σε ορισμένες σελίδες για να δείτε την έξοδο ίχνος.

Σημείωση: είναι το DTrace διαθέσιμο σε OS X από προεπιλογή, στο Linux θα πρέπει πιθανώς dtrace4linux ή να ελέγξετε για κάποιες άλλες εναλλακτικές λύσεις .

Δείτε: Χρησιμοποιώντας την PHP και DTrace στο php.net


SystemTap

Εναλλακτικά, ελέγξτε για SystemTap εντοπισμό από την εγκατάσταση του πακέτου ανάπτυξης SystemTap SDT (π.χ. yum install systemtap-sdt-devel).

Εδώ είναι το παράδειγμα σεναρίου ( all_probes.stp) για τον εντοπισμό όλων των βασικών PHP σημεία στατική ανιχνευτής καθ 'όλη τη διάρκεια της εκτέλεσης του σεναρίου PHP με SystemTap:

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
    printf("Probe compile__file__entry\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
    printf("Probe compile__file__return\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
    printf("Probe error\n");
    printf("  errormsg %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
    printf("Probe exception__caught\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
    printf("Probe exception__thrown\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
    printf("Probe execute__entry\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
    printf("Probe execute__return\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
    printf("Probe function__entry\n");
    printf("  function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
    printf("Probe function__return: %s\n", user_string($arg1));
    printf(" function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
    printf("Probe request__shutdown\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
    printf("Probe request__startup\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}

Χρήση:

stap -c 'sapi/cli/php test.php' all_probes.stp

Δείτε: Χρήση SystemTap με την PHP DTrace Στατική Probes σε php.net

Απαντήθηκε 21/03/2016 στις 12:34
πηγή χρήστη

ψήφοι
1

Η πιο σφάλματα μπορούν να βρεθούν εύκολα με την απλή var_dumpσης κάποιες από τις βασικές μεταβλητές, αλλά αυτό εξαρτάται φυσικά από το είδος της εφαρμογής που αναπτύσσουν.

Για μια πιο πολύπλοκους αλγόριθμους οι βήμα / σημείο διακοπής λειτουργίες / ρολόι είναι πολύ χρήσιμη (αν όχι απαραίτητο)

Απαντήθηκε 10/05/2010 στις 10:18
πηγή χρήστη

ψήφοι
1

i χρησιμοποιούν Zend Studio για έκλειψη με το ενσωματωμένο πρόγραμμα εντοπισμού σφαλμάτων. Του εξακολουθεί να είναι αργή σε σύγκριση με τον εντοπισμό σφαλμάτων με έκλειψη PDT με xdebug. Ας ελπίσουμε ότι θα διορθώσετε αυτά τα ζητήματα, η ταχύτητα έχει βελτιωθεί τα τελευταία δελτία, αλλά εξακολουθεί να περπατήσει πέρα ​​τα πράγματα διαρκεί 2-3 δευτερόλεπτα. Η γραμμή εργαλείων firefox Zend πραγματικά κάνει τα πράγματα εύκολα (debug επόμενη σελίδα, τρέχουσα σελίδα, κλπ). Επίσης, παρέχει ένα profiler που θα σημείο αναφοράς τον κωδικό σας και να παρέχουν πίτα-διαγράμματα, χρόνος εκτέλεσης, κ.λπ.

Απαντήθηκε 17/08/2008 στις 19:38
πηγή χρήστη

ψήφοι
1

Σε ένα περιβάλλον παραγωγής, μπορώ να συνδεθώ σχετικά δεδομένα για το αρχείο καταγραφής σφαλμάτων του διακομιστή με error_log ().

Απαντήθηκε 15/08/2008 στις 05:23
πηγή χρήστη

ψήφοι
1

+1 για print_r (). Χρησιμοποιήστε το για να πετάξει έξω τα περιεχόμενα ενός αντικειμένου ή μεταβλητή. Για να γίνει πιο ευανάγνωστο, το κάνει με ένα προ ετικέτα, ώστε να μην χρειάζεται να δείτε την πηγή.

echo '<pre>';
print_r($arrayOrObject);

Επίσης var_dump ($ πράγμα) - αυτό είναι πολύ χρήσιμο να δούμε το είδος των subthings

Απαντήθηκε 05/08/2008 στις 01:49
πηγή χρήστη

ψήφοι
0

Συνήθως βρίσκω δημιουργήσει μια λειτουργία καταγραφής προσαρμοσμένο σε θέση να αποθηκεύσετε στο αρχείο, πληροφορίες κατάστημα εντοπισμού σφαλμάτων, και τελικά εκ νέου εκτύπωση σε ένα κοινό υποσέλιδο.

Μπορείτε επίσης να παρακάμψετε κοινή τάξη Εξαίρεση, έτσι ώστε αυτό το είδος του εντοπισμού σφαλμάτων είναι ημι-αυτόματο.

Απαντήθηκε 22/10/2008 στις 09:46
πηγή χρήστη

ψήφοι
0

Τα ολοκληρωμένα προγράμματα εντοπισμού σφαλμάτων, όπου μπορείτε να παρακολουθήσετε τις τιμές των μεταβλητών αλλαγής όπως σας βήμα μέσα από κώδικα είναι πραγματικά δροσερό. Κάνουν, όμως, απαιτεί εγκατάσταση λογισμικού στον server και ένα ορισμένο ποσό της ρύθμισης για τον πελάτη. Και οι δύο εκ των οποίων απαιτούν περιοδική συντήρηση για να κρατήσει σε καλή κατάσταση λειτουργίας.

Μια print_r είναι εύκολο να γράψει και είναι εγγυημένη για να εργαστούν σε οποιαδήποτε ρύθμιση.

Απαντήθηκε 22/08/2008 στις 21:10
πηγή χρήστη

ψήφοι
0

Ανάλογα με το θέμα που μου αρέσει ένα συνδυασμό error_reporting (E_ALL) αναμιγνύεται με δοκιμές ηχώ (για να βρείτε τη γραμμή παραβατική / αρχείο το σφάλμα που συνέβη στην initally? Ξέρετε ότι δεν είναι πάντα η php γραμμή / αρχείο σας λέει έτσι;), IDE τιράντες που ταιριάζουν (για την επίλυση των «σφάλμα ανάλυσης: συντακτικό λάθος, απροσδόκητο τέλος $» θέματα), και print_r ()? έξοδος; χωματερές (πραγματικό προγραμματιστές δείτε την πηγή? p).

Μπορείτε, επίσης, δεν μπορεί να νικήσει phpdebug (ελέγξτε sourceforge) με «memory_get_usage ()?» και "memory_get_peak_usage ()?" για να βρείτε τις προβληματικές περιοχές.

Απαντήθηκε 06/08/2008 στις 16:46
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more