Improved exception handling and debugging

This commit is contained in:
Shoghi Cervantes 2014-11-22 13:52:36 +01:00
parent a906a2988b
commit 4a90ac270f
6 changed files with 34 additions and 3 deletions

View File

@ -2088,7 +2088,14 @@ class Server{
//Do level ticks
foreach($this->getLevels() as $level){
$level->doTick($currentTick);
try{
$level->doTick($currentTick);
}catch (\Exception $e){
$this->logger->critical("Could not tick level ".$level->getName().": ".$e->getMessage());
if($this->logger instanceof MainLogger){
$this->logger->logException($e);
}
}
}
}
@ -2197,7 +2204,13 @@ class Server{
}
}
$this->generationManager->process();
try{
$this->generationManager->process();
}catch (\Exception $e){
if($this->logger instanceof MainLogger){
$this->logger->logException($e);
}
}
if(($this->tickCounter % 100) === 0){
foreach($this->levels as $level){

View File

@ -22,6 +22,7 @@
namespace pocketmine\command;
use pocketmine\Server;
use pocketmine\utils\MainLogger;
use pocketmine\utils\TextFormat;
class FormattedCommandAlias extends Command{
@ -49,6 +50,9 @@ class FormattedCommandAlias extends Command{
$sender->sendMessage(TextFormat::RED . $e->getMessage());
}else{
$sender->sendMessage(TextFormat::RED . "An internal error occurred while attempting to perform this command");
if(($logger = $sender->getServer()->getLogger()) instanceof MainLogger){
$logger->logException($e);
}
}
return false;

View File

@ -56,6 +56,7 @@ use pocketmine\command\defaults\VanillaCommand;
use pocketmine\command\defaults\VersionCommand;
use pocketmine\command\defaults\WhitelistCommand;
use pocketmine\Server;
use pocketmine\utils\MainLogger;
class SimpleCommandMap implements CommandMap{
@ -182,6 +183,9 @@ class SimpleCommandMap implements CommandMap{
$target->execute($sender, $sentCommandLabel, $args);
}catch(\Exception $e){
$this->server->getLogger()->critical("Unhandled exception executing command '". $commandLine ."' in ". $target.": ".$e->getMessage());
if(($logger = $sender->getServer()->getLogger()) instanceof MainLogger){
$logger->logException($e);
}
}
$target->timings->stopTiming();

View File

@ -184,8 +184,8 @@ class RakLibInterface implements ServerInstance, SourceInterface{
if(\pocketmine\DEBUG > 1){
$logger = $this->server->getLogger();
if($logger instanceof MainLogger){
$logger->logException($e);
$logger->debug("Packet ".get_class($pk)." 0x".bin2hex($packet->buffer));
$logger->logException($e);
}
}
}

View File

@ -251,6 +251,9 @@ class PluginManager{
}
}catch(\Exception $e){
$this->server->getLogger()->error("Could not load '" . $file . "' in folder '" . $directory . "': " . $e->getMessage());
if(($logger = $this->server->getLogger()) instanceof MainLogger){
$logger->logException($e);
}
}
}
}
@ -666,6 +669,9 @@ class PluginManager{
$registration->callEvent($event);
}catch(\Exception $e){
$this->server->getLogger()->critical("Could not pass event ". $event->getEventName() ." to ". $registration->getPlugin()->getDescription()->getFullName() .": ".$e->getMessage()." on ".get_class($registration->getListener()));
if(($logger = $this->server->getLogger()) instanceof MainLogger){
$logger->logException($e);
}
}
}
}

View File

@ -26,6 +26,7 @@ namespace pocketmine\scheduler;
use pocketmine\plugin\Plugin;
use pocketmine\Server;
use pocketmine\utils\MainLogger;
use pocketmine\utils\PluginException;
use pocketmine\utils\ReversePriorityQueue;
@ -236,6 +237,9 @@ class ServerScheduler{
$task->run($this->currentTick);
}catch (\Exception $e){
Server::getInstance()->getLogger()->critical("Could not execute task ". $task->getTaskName() .": ".$e->getMessage());
if(($logger = Server::getInstance()->getLogger()) instanceof MainLogger){
$logger->logException($e);
}
}
$task->timings->stopTiming();
}