diff --git a/src/PocketMinecraftServer.php b/src/PocketMinecraftServer.php index ac655f6cf..32afc47d2 100644 --- a/src/PocketMinecraftServer.php +++ b/src/PocketMinecraftServer.php @@ -420,6 +420,11 @@ class PocketMinecraftServer{ $dump .= "[".($l + 1)."] ".@$file[$l]."\r\n"; } $dump .= "\r\n\r\n"; + $dump .= "Backtrace: \r\n"; + foreach(getTrace() as $line){ + $dump .= "$line\r\n"; + } + $dump .= "\r\n\r\n"; $version = new VersionString(); $dump .= "PocketMine-MP version: ".$version." #".$version->getNumber()." [Protocol ".ProtocolInfo::CURRENT_PROTOCOL."; API ".CURRENT_API_VERSION."]\r\n"; $dump .= "Git commit: ".GIT_COMMIT."\r\n"; diff --git a/src/functions.php b/src/functions.php index 720d8062c..6fcdcf891 100644 --- a/src/functions.php +++ b/src/functions.php @@ -218,6 +218,21 @@ function console($message, $EOL = true, $log = true, $level = 1){ } } +function getTrace($start = 1){ + $e = new Exception(); + $trace = $e->getTrace(); + $messages = array(); + $j = 0; + for($i = (int) $start; isset($trace[$i]); ++$i, ++$j){ + $params = ""; + foreach($trace[$i]["args"] as $name => $value){ + $params .= (is_object($value) ? get_class($value)." ".(method_exists($value, "__toString") ? $value->__toString() : "object"):gettype($value)." ".@strval($value)).", "; + } + $messages[] = "#$j ".(isset($trace[$i]["file"]) ? $trace[$i]["file"]:"")."(".(isset($trace[$i]["line"]) ? $trace[$i]["line"]:"")."): ".(isset($trace[$i]["class"]) ? $trace[$i]["class"].$trace[$i]["type"]:"").$trace[$i]["function"]."(".substr($params, 0, -2).")"; + } + return $messages; +} + function error_handler($errno, $errstr, $errfile, $errline){ if(error_reporting() === 0){ //@ error-control return false; @@ -241,6 +256,9 @@ function error_handler($errno, $errstr, $errfile, $errline){ ); $errno = isset($errorConversion[$errno]) ? $errorConversion[$errno]:$errno; console("[ERROR] A ".$errno." error happened: \"$errstr\" in \"$errfile\" at line $errline", true, true, 0); + foreach(getTrace() as $i => $line){ + console("[TRACE] $line"); + } return true; }