Index: trunk/kernel/include/debugger.php
===================================================================
diff -u -r837 -r842
--- trunk/kernel/include/debugger.php (.../debugger.php) (revision 837)
+++ trunk/kernel/include/debugger.php (.../debugger.php) (revision 842)
@@ -8,8 +8,8 @@
* @var Array
*/
var $Data = Array();
+ var $ProfilerData = Array();
-
function dumpVars()
{
$dumpVars = func_get_args();
@@ -36,7 +36,7 @@
case 'var_dump':
$ret = highlight_string('', true);
$ret = preg_replace('/<\?php (.*)\?>/s','$1',$ret);
- return $ret;
+ return addslashes($ret);
break;
case 'trace':
@@ -65,7 +65,13 @@
$ret = preg_replace('/<\?php (.*)\?>/s','$1',$ret);*/
return $ret;
break;
-
+
+ case 'profiler':
+ $profileKey = $Data['profile_key'];
+ $Data =& $this->ProfilerData[$profileKey];
+ return 'Name: '.$Data['description'].'. Runtime: '.($Data['ends'] - $Data['begins']);
+ break;
+
default:
return 'incorrect debug data';
break;
@@ -95,6 +101,17 @@
$this->Data[] = Array('html' => $html,'debug_type' => 'html');
}
+ function profileStart($key, $description)
+ {
+ $this->ProfilerData[$key] = Array('begins' => time(), 'debuggerRowID' => count($this->Data), 'description' => $description);
+ $this->Data[] = array('profile_key' => $key, 'debug_type' => 'profiler');
+ }
+
+ function profileFinish($key)
+ {
+ $this->ProfilerData[$key]['ends'] = time();
+ }
+
function getErrorNameByCode($errorCode)
{
switch($errorCode)
@@ -127,6 +144,7 @@
{
$i = 0; $lineCount = count($this->Data);
?>
+
@@ -153,19 +171,25 @@
{
if(!$e) $e = window.event;
var $KeyCode = getEventKeyCode($e);
- if( $KeyCode == 113 && $e.ctrlKey || $KeyCode == 123 ) // F12 (for Maxthon) or Ctrl+F2 (for Other Browsers)
+ //alert(showProps($e));
+ if($KeyCode == 123 || $KeyCode == 68 && $e.shiftKey) // F12 (for Maxthon) or Ctrl+F2 (for Other Browsers)
{
- var $DebugLayer = document.getElementById('debug_layer');
- if( typeof($DebugLayer) != 'undefined' )
- {
- resizeDebugLayer($e);
- $DebugLayer.style.display = ($DebugLayer.style.display == 'none') ? 'block' : 'none';
- }
+ toggleDebugLayer();
$e.cancelBubble = true;
if($e.stopPropagation) $e.stopPropagation();
}
}
+ function toggleDebugLayer()
+ {
+ var $DebugLayer = document.getElementById('debug_layer');
+ if( typeof($DebugLayer) != 'undefined' )
+ {
+ resizeDebugLayer(null);
+ $DebugLayer.style.display = ($DebugLayer.style.display == 'none') ? 'block' : 'none';
+ }
+ }
+
function prepareSizes($Prefix)
{
var $ret = '';
@@ -191,6 +215,39 @@
return true;
}
+ function SetClipboard($data)
+ {
+ if (window.clipboardData)
+ {
+ window.clipboardData.setData('Text', $data);
+ }
+ else if (window.netscape)
+ {
+ //netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+ var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
+ if (!clip) return;
+
+ var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
+ if (!trans) return;
+
+ trans.addDataFlavor('text/unicode');
+ var str = new Object();
+ var len = new Object();
+ var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+
+ var $copytext=$data;
+
+ str.data=$copytext;
+
+ trans.setTransferData("text/unicode",str,$copytext.length*2);
+ var clipid=Components.interfaces.nsIClipboard;
+ if (!clip) return false;
+
+ clip.setData(trans,null,clipid.kGlobalClipboard);
+ }
+
+ }
+
function showProps($Obj, $Name)
{
var $ret = '';
@@ -228,6 +285,11 @@
window.onresize = resizeDebugLayer;
window.onscroll = resizeDebugLayer;
window.focus();
+ if( typeof($isFatalError) != 'undefined' && $isFatalError == 1 )
+ {
+ toggleDebugLayer();
+ document.getElementById('debug_layer').scrollTop = 10000000;
+ }
error ['.$errno.'] = ['.$errstr.']
';
$errorType = $this->getErrorNameByCode($errno);
- if( substr($errorType,0,5) == 'Fatal')
- {
-
- $this->printReport();
- exit;
- }
if(!$errorType)
{
trigger_error('Unknown error type ['.$errno.']', E_USER_ERROR);
return false;
}
$this->Data[] = Array('no' => $errno, 'str' => $errstr, 'file' => $errfile, 'line' => $errline, 'context' => $errcontext, 'debug_type' => 'error');
+ if( substr($errorType,0,5) == 'Fatal')
+ {
+ echo '';
+ exit;
+ }
}
}
$debugger = new Debugger();
+ $debugger->appendHTML('Hide Debugger');
+
set_error_handler( array(&$debugger,'saveError') );
register_shutdown_function( array(&$debugger,'printReport') );