Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Allerseits :P

Hat jemand erfahrung mit der Funktion debug_backtrace()?

Also ich verwende diese für debuggen und error reporting, leider muss ich imme viel zu viel zeilen Coden.

Hier ein kleine Codeausschnit:

<?php
//debug.php
class log {
private $log;
private $err;
function __construct() {
$this->log[0] = "create class log: ".__file__;
ob_start();
function err() {
global $log;
$args = func_get_args();
$temp = debug_backtrace();
$temp = $temp[0][file] . " on " . $temp[0][line];
$log->err($temp, $args);
}
function debug() {
global $log;
$args = func_get_args();
$temp = debug_backtrace();
$temp = $temp[0][file] . " on " . $temp[0][line];
$log->debug($temp, $args);
}
}
public function save() {
echo "<!-- /*\r\n# BEGIN DEBUG\r\n\r\n";
echo implode($this->log, "\r\n" );
echo "\r\n\r\n# END DEBUG\r*/// -->\r\n";
}
public function debug($ziel, $args) {
if( count($args) != 0) {
$this->log[] = "DEBUG ". $ziel;
$temp = array();
for($i = 0; $i < count($args); $i++) {
$temp[] = var_export($args[$i], true);
}
$this->log[] = str_replace("\n", "\n\t", "\t".implode($temp, "\r\n" ));
}
}
public function err($ziel, $args) {
if( count($args) != 0) {
$this->log[] = "ERROR ". $ziel;
$this->err[] = "ERROR ". $ziel;
$temp = array();
for($i = 0; $i < count($args); $i++) {
$temp[] = var_export($args[$i], true);
}
$this->log[] = str_replace("\n", "\n\t", "\t".implode($temp, "\r\n" ));
$this->err[] = str_replace("\n", "\n\t", "\t".implode($temp, "\r\n" ));
}
}
function __destruct() {
$PAGE_OUTPUT = ob_get_contents();
ob_end_clean();
$this->save();
echo $PAGE_OUTPUT;
}
}
$log = new log;
?>[/PHP]

[PHP]<?php
//testClass.php
class testClass {
private $vars;
private function __set($Name, $Value) {

/* DEBUG */$temp = debug_backtrace();
/* DEBUG */$temp = $temp[0][file].' on '.$temp[0][line];
/* DEBUG */debug('__set() '.$temp, $Name, $Value);

$this->vars[$Name] = &$Value;
}
private function __get( $Name ) {
if( isset( $this->vars[$Name] ) ) {

/* DEBUG */$temp = debug_backtrace();
/* DEBUG */$temp = $temp[0][file].' on '.$temp[0][line];
/* DEBUG */debug('__get() '.$temp, $Name);

return $this->vars[$Name];
} else {

/* DEBUG */$temp = debug_backtrace();
/* DEBUG */$temp = $temp[0][file].' on '.$temp[0][line];
/* DEBUG */err('__get() '.$temp, '"'.$Name.'" not exist');

return NULL;
}
}
}
?>

<?php
//index.php
require_once('debug.php');
require_once('testClass.php');

$test = new testClass;
$test->var1 = "my var 1";
echo $test->var1;
echo $test->var2;
?>[/PHP]

HTML Ausgabe Quelltext

[code]<!-- /* # BEGIN DEBUG create class log: /var/www/web4/html/test/debug.php DEBUG /var/www/web4/html/test/testClass.php on 8 '__set() /var/www/web4/html/test/index.php on 6' 'var1' 'my var 1' DEBUG /var/www/web4/html/test/testClass.php on 17 '__get() /var/www/web4/html/test/index.php on 7' 'var1' ERROR /var/www/web4/html/test/testClass.php on 24 '__get() /var/www/web4/html/test/index.php on 8' '"var2" not exist' # END DEBUG */// --> my var 1[/code]

bis jetz muste ich immer umständlich in alle functionen und methoden die Function debug_backtrace(); verwenden um vom caller __FILE__ und __LINE__ zu erfahren und dann an debug() bzw. err() übergeben.

Kennt einer vieleicht eine möglichkei wie ich nur debug($verte) und err($werte) verwende und trotzdem den gesamte ablauf rausfinde?

ich Dank schonmal in voraus ^^

lg

Geschrieben

nein, ich sehe keine möglichkeit an den caller zu kommen.

Allerdings wird mir der Sinn nicht ganz klar,

debuggen ;) gute idee, aber du willst jeden __set und __get Aufruf mitloggen ?

Ich würde eher Exceptions empfehlen... ich bezweifle das du jeden Anwendungsfall so detailiert durchtesten wirst, mit jeder Variablenkombination o.ä. ^^ Für den fall der Fälle können exceptions dann zur Laufzeit verarbeitet werden.

Geschrieben
aber du willst jeden __set und __get Aufruf mitloggen ?
Ja aber das auch nur für tests bzw. in den fällen wo ich keine ausgabe habe wie kommunikation zwischen 2 servern.

Ich würde eher Exceptions empfehlen... ich bezweifle das du jeden Anwendungsfall so detailiert durchtesten wirst, mit jeder Variablenkombination o.ä. ^^ Für den fall der Fälle können exceptions dann zur Laufzeit verarbeitet werden.
Exceptions werden bereits in allen functionen/klassen/methoden verwendet und verarbeitet.

leider hab ich noch keine lösung gefunden für loggen bei fatal errors. Ich recherschiere gerade wie ich mit hilfe von bash scripten die PHP scripte unter aufsicht zu halten, aber leider momentan erfolglos.

Ich dank dir aufjede Fall für Antwort, ich versuch troztdem ein guten debbuger weiter zu entwickelt ;) und werd dann ma ins Forum Posten wenn was guter rauskomt :D

Liebe Grüße

J.Schmidt

Geschrieben

es gibt eine möglichkeit für Fatal errors, "register_shutdown_function" und "error_get_last"

da gab es mal ein Beispiel im netz, du musst nur den error-type prüfen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...