Dynamic debug_backtrace()?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ansatz
beispiel
code
dateiname
datum
einzige problem
erfinden
ersetzen
erzeugten array
fehler
fertigen klassen
funktion
klasse erstellen
moment
position
problem
url
ursprung
wandern
wissen
-
Moin,
ich kämpfe im moment ein wenig mit debug_backtrace() um meiner debug class sachen wie linenumbers und so weiter hinzuzufügen. Einzige problem was ich im moment habe, ich weiß nie von wo der Trace abgefeuert wird. Sprich ich kann kann nicht einfach bei gehen und sagen $trace['X'] ist der ursprung des Trace.
Hier das Scenario:
DebugClass
class myClass { // TracerMethod -> private static function backtrace() { // gib nen sauber trace zurück } // RandomMethod -> public function myMethod1($arg1, $arg2....) { $trace = self::backtrace(); // mach den rest } }
Die Klasse wird irgendwo in einem Projekt eingebunden und soll dann einfach funktionieren. Egal wo sie dann aufgerufen wird.
Beispiel:
// DateiA im root -> require_once('inc/class/myClass.php'); $class->myMethod1(); require('DateiB'); // DateiB in /folder1/folder2/ $class->myMethod2(); // ähnlich wie myMethod1()
Im Fall von DateiB taucht im Trace auch require(), und ggf. alle andere Funktionen, auf. Ich will aber nur die daten vom $class->myMethod() Call haben.
Hoffentlich habe ich mir klar genug ausgedrückt...
Und nein, ich will nicht auf irgend welche fertigen Klassen zurückgreifen, überladene Frameworks verwenden, oder sonst irgend nen komischen Käse machen. Ich will die Klasse erstellen, weil ich davon lernen will, nicht um das Rad neu zu erfinden! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hmm, du könntest, du habe ich meine Debugklassen immer gestalltet, über das Error_Reporting System gehen. Dass ich über set_error_handler (http://php.net/manual/de/function.set-error-handler.php) einen eigenen Handler definiert habe, welcher sich um alles kümmert. Diesem wird die Line, File, usw alles mitgeteilt. Deine eigenen "Debug-Errors" kannst du dann über ein trigger_error() feuern und der Handle kümmert sich drum. So habe ich das immer gehandhabt, das war das, in meinen Augen, einfachste.
Vielleicht habe ich auch nicht ganz verstanden, was dein Problem war, doch du möchtest doch wissen, WO der Error genau gefeuert wurde, und das ist mit dieser Methode am einfachsten zu finden. Dafür geht Funktionsname usw aber verloren. Aber vielleicht hast du hier ja einen Ansatz, dass du in die "Trigger Error" bei möglichkeit deinen Debugtrace übergibst?
Liebe Grüße -
Ich habe mit absicht nicht den weg über set_error_handler() gewählt, um mir einfach ein paar optionen offen zu halten. Zum Beispiel wird bei meiner Klasse unterschieden ob es "nur" debug oder warn messages sind die durch die classe wandern. Außerdem ist das logging zu einer datei nur optional. Dazu kommt noch eine optionale HTML Ausgabe der Messages.
Kurz gesagt, das ganze ist recht dynamisch und ich will möchte keine bestehenden PHP-Funktionen ersetzen.
Den Trace brauche ich dazu um genau zu wissen wo der Fehler aufgetaucht ist. Mit der aktuellen Klasse verliert man recht schnell den überblick, wo der Fehler aufgetaucht ist.
Sprich: DateiName -> Line -> Function -> Args
Aber dass ist nicht wirklich das Problem, sondern wie ich herausfinden auf welcher Position im, vom debug_backtrace() erzeugten, Array sich der Ursprung befindet, ohne wirklich zu wissen wo genau der Trace gestartet wurde. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage