Created
April 11, 2011 19:39
-
-
Save dfurber/914152 to your computer and use it in GitHub Desktop.
If you use TextMate on your PHP project using the Yii application framework, place this file in protected/views/system. Then your stack trace will have clickable links to the code in question. Also it will summarize the $_REQUEST and $_SESSION variables a
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html PUBLIC | |
"-//W3C//DTD XHTML 1.0 Transitional//EN" | |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | |
<title><?php echo CHtml::encode($data['type'])?></title> | |
<style type="text/css"> | |
/*<![CDATA[*/ | |
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;} | |
body{line-height:1;} | |
ol,ul{list-style:none;} | |
blockquote,q{quotes:none;} | |
blockquote:before,blockquote:after,q:before,q:after{content:none;} | |
:focus{outline:0;} | |
ins{text-decoration:none;} | |
del{text-decoration:line-through;} | |
table{border-collapse:collapse;border-spacing:0;} | |
body { | |
font: normal 9pt "Verdana"; | |
color: #000; | |
background: #fff; | |
} | |
h1 { | |
font: normal 18pt "Verdana"; | |
color: #f00; | |
margin-bottom: .5em; | |
} | |
h2 { | |
font: normal 14pt "Verdana"; | |
color: #800000; | |
margin-bottom: .5em; | |
} | |
h3 { | |
font: bold 11pt "Verdana"; | |
} | |
pre { | |
font: normal 11pt Menlo, Consolas, "Lucida Console"; | |
} | |
pre span.error { | |
display: block; | |
background: #fce3e3; | |
} | |
pre span.ln { | |
color: #999; | |
padding-right: 0.5em; | |
border-right: 1px solid #ccc; | |
} | |
pre span.error-ln { | |
font-weight: bold; | |
} | |
.container { | |
margin: 1em 4em; | |
} | |
.version { | |
color: gray; | |
font-size: 8pt; | |
border-top: 1px solid #aaa; | |
padding-top: 1em; | |
margin-bottom: 1em; | |
} | |
.message { | |
color: #000; | |
padding: 1em; | |
font-size: 11pt; | |
background: #f3f3f3; | |
-webkit-border-radius: 10px; | |
-moz-border-radius: 10px; | |
border-radius: 10px; | |
margin-bottom: 1em; | |
line-height: 160%; | |
} | |
.source { | |
margin-bottom: 1em; | |
} | |
.code pre { | |
background-color: #ffe; | |
margin: 0.5em 0; | |
padding: 0.5em; | |
line-height: 125%; | |
border: 1px solid #eee; | |
} | |
.source .file { | |
margin-bottom: 1em; | |
font-weight: bold; | |
} | |
.traces { | |
margin: 2em 0; | |
} | |
.trace { | |
margin: 0.5em 0; | |
padding: 0.5em; | |
} | |
.trace.app { | |
border: 1px dashed #c00; | |
} | |
.trace .number { | |
text-align: right; | |
width: 2em; | |
padding: 0.5em; | |
} | |
.trace .content { | |
padding: 0.5em; | |
} | |
.trace .plus, | |
.trace .minus { | |
display:inline; | |
vertical-align:middle; | |
text-align:center; | |
border:1px solid #000; | |
color:#000; | |
font-size:10px; | |
line-height:10px; | |
margin:0; | |
padding:0 1px; | |
width:10px; | |
height:10px; | |
} | |
.trace.collapsed .minus, | |
.trace.expanded .plus, | |
.trace.collapsed pre { | |
display: none; | |
} | |
.trace-file { | |
cursor: pointer; | |
padding: 0.2em; | |
} | |
.trace-file:hover { | |
background: #f0ffff; | |
} | |
/*]]>*/ | |
</style> | |
</head> | |
<body> | |
<div class="container"> | |
<h1><?php echo $data['type']?> in <?php echo Yii::app()->controller->id ?>#<?php echo Yii::app()->controller->action->id ?> on line <?php echo $data['line']; ?></h1> | |
<p class="message"> | |
<?php echo nl2br(CHtml::encode($data['message']))?> | |
</p> | |
<div class="source"> | |
<p class="file"><?php echo CHtml::link(CHtml::encode($data['file']), 'txmt://open?url=file://'.$data['file'].'&line='.$data['line'])."(".$data['line'].")"; ?></p> | |
<?php echo $this->renderSourceCode($data['file'],$data['line'],$this->maxSourceLines); ?> | |
</div> | |
<div class="traces"> | |
<h2>Stack Trace</h2> | |
<?php $count=0; ?> | |
<table style="width:100%;"> | |
<?php foreach($data['traces'] as $n => $trace): ?> | |
<?php | |
if($this->isCoreCode($trace)) | |
$cssClass='core collapsed'; | |
else if(++$count>3) | |
$cssClass='app collapsed'; | |
else | |
$cssClass='app expanded'; | |
$hasCode=$trace['file']!=='unknown' && is_file($trace['file']); | |
?> | |
<tr class="trace <?php echo $cssClass; ?>"> | |
<td class="number"> | |
#<?php echo $n; ?> | |
</td> | |
<td class="content"> | |
<div class="trace-file"> | |
<?php if($hasCode): ?> | |
<div class="plus">+</div> | |
<div class="minus">–</div> | |
<?php endif; ?> | |
<?php | |
echo ' '; | |
echo CHtml::link(CHtml::encode($trace['file']), 'txmt://open?url=file://'.$trace['file'].'&line='.$trace['line'])."(".$trace['line'].")"; | |
// echo CHtml::encode($trace['file'])."(".$trace['line'].")"; | |
echo ': '; | |
if(!empty($trace['class'])) | |
echo "<strong>{$trace['class']}</strong>{$trace['type']}"; | |
echo "<strong>{$trace['function']}</strong>("; | |
if(!empty($trace['args'])) | |
echo CHtml::encode($this->argumentsToString($trace['args'])); | |
echo ')'; | |
?> | |
</div> | |
<?php if($hasCode) echo $this->renderSourceCode($trace['file'],$trace['line'],$this->maxTraceSourceLines); ?> | |
</td> | |
</tr> | |
<?php endforeach; ?> | |
</table> | |
</div> | |
<div class="params"> | |
<h2>Parameters</h2> | |
<ul> | |
<?php foreach($_REQUEST as $key => $param) { ?> | |
<li><?php echo $key ?>: <?php var_dump($param) ?></li> | |
<?php } ?> | |
</ul> | |
</div> | |
<div class="params"> | |
<h2>Session</h2> | |
<ul> | |
<?php foreach($_SESSION as $key => $param) { ?> | |
<li><?php echo $key ?>: <?php var_dump($param) ?></li> | |
<?php } ?> | |
</ul> | |
</div> | |
<div class="version"> | |
<?php echo date('Y-m-d H:i:s',$data['time']) .' '. $data['version']; ?> | |
</div> | |
</div> | |
<script type="text/javascript"> | |
/*<![CDATA[*/ | |
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)"); | |
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)"); | |
var e = document.getElementsByTagName("div"); | |
for(var j=0,len=e.length;j<len;j++){ | |
if(traceReg.test(e[j].className)){ | |
e[j].onclick = function(){ | |
var trace = this.parentNode.parentNode; | |
if(collapsedReg.test(trace.className)) | |
trace.className = trace.className.replace("collapsed", "expanded"); | |
else | |
trace.className = trace.className.replace("expanded", "collapsed"); | |
} | |
} | |
} | |
/*]]>*/ | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment