Index: trunk/kernel/include/debugger.php =================================================================== diff -u -r903 -r904 --- trunk/kernel/include/debugger.php (.../debugger.php) (revision 903) +++ trunk/kernel/include/debugger.php (.../debugger.php) (revision 904) @@ -6,6 +6,7 @@ if(!defined('DBG_USE_SHUTDOWN_FUNC')) define('DBG_USE_SHUTDOWN_FUNC',1); if(!defined('DBG_HANDLE_ERRORS')) define('DBG_HANDLE_ERRORS', isset($_REQUEST['debug_host']) ? 0 : 1); + if(!defined('DBG_RAISE_ON_WARNINGS')) define('DBG_RAISE_ON_WARNINGS',0); if(!defined('DOC_ROOT')) define('DOC_ROOT',$_SERVER['DOCUMENT_ROOT']); if(!defined('WINDOWS_ROOT')) define('WINDOWS_ROOT','w:'); @@ -30,6 +31,8 @@ var $ProfilerData = Array(); var $RecursionStack = Array(); // prevent recursion when processing debug_backtrace() function results + var $TraceNextError=false; + var $Options = 0; var $OptionsMap = Array('shutdown_func' => 1, 'error_handler' => 2, 'output_buffer' => 4, 'highlight_output' => 8); @@ -64,6 +67,16 @@ return ($this->Options & $this->OptionsMap[$name]) == $this->OptionsMap[$name]; } + /** + * Set's flag, that next error that occurs will + * be prepended by backtrace results + * + */ + function traceNext() + { + $this->TraceNextError=true; + } + function dumpVars() { $dumpVars = func_get_args(); @@ -93,22 +106,32 @@ break; case 'trace': + ini_set('memory_limit','500M'); $trace =& $Data['trace']; + + //return 'sorry'; + //return $this->highlightString(print_r($trace,true)); + + $i = 0; $traceCount = count($trace); $ret = ''; while($i < $traceCount) { $traceRec =& $trace[$i]; $argsID = 'trace_args_'.$dataIndex.'_'.$i; - $ret .= 'Function: '.$this->getFileLink($traceRec['file'],$traceRec['line'],$traceRec['class'].$traceRec['type'].$traceRec['function']).''; - $ret .= ' in '.basename($traceRec['file']).' on line '.$traceRec['line'].'
'; - + if(isset($traceRec['file'])) + { + $ret .= 'Function: '.$this->getFileLink($traceRec['file'],$traceRec['line'],$traceRec['class'].$traceRec['type'].$traceRec['function']); + $ret .= ' in '.basename($traceRec['file']).' on line '.$traceRec['line'].'
'; + } + else + { + $ret .= 'no file information available'; + } // ensure parameter value is not longer then 200 symbols $this->processTraceArguments($traceRec['args']); - $args = $this->highlightString(print_r($traceRec['args'], true)); $ret .= ''; - $i++; } return $ret; @@ -581,9 +604,12 @@ window.onresize = resizeDebugLayer; window.onscroll = resizeDebugLayer; window.focus(); - if( typeof($isFatalError) != 'undefined' && $isFatalError == 1 ) + if( typeof($isFatalError) != 'undefined' && $isFatalError == 1 || ) { toggleDebugLayer(); + } + if( typeof($isFatalError) != 'undefined' && $isFatalError == 1) + { document.getElementById('debug_layer').scrollTop = 10000000; } @@ -628,7 +654,11 @@ $pos++; $errline = substr($tmpStr,$pos,strpos($tmpStr,')',$pos)-$pos); } - + if($this->TraceNextError) + { + $this->appendTrace(); + $this->TraceNextError=false; + } $this->Data[] = Array('no' => $errno, 'str' => $errstr, 'file' => $errfile, 'line' => $errline, 'context' => $errcontext, 'debug_type' => 'error'); if( substr($errorType,0,5) == 'Fatal')