答案 0 :(得分:4)
我使用print_r()
因为我喜欢漂亮的数组结构......但var_dump
确实为您提供了更多信息(如类型)
$obj = (object) array(1, 2, 3);
// output of var_dump:
object(stdClass)#1 (3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
// output of print_r
stdClass Object
(
[0] => 1
[1] => 2
[2] => 3
)
答案 1 :(得分:4)
我使用这些自定义函数取决于我是处理数组还是单个值:
function show($array)
{
echo '<pre>';
print_r($array);
echo '</pre>';
}
function prn($var)
{
echo '<br/>' . $var . '<br/>';
}
我发现这些功能简化了故障排除,因为我通常最终需要格式化输出,以便我可以在屏幕上轻松浏览。
对于更复杂的故障排除,我们使用Exception类的扩展版本,它将通过电子邮件发送堆栈跟踪以及特定的错误消息。这给了我所涉及的功能,涉及的文件以及错误中涉及的行或行以及我创建的任何自定义消息,以便我确切知道发生了什么。对于增加的故障排除层,我们还会在要访问的数据库中记录这些错误。
答案 2 :(得分:4)
我总是使用Xdebug扩展的var_dump。它给出了很多详细的输出。
有关详细信息,请参阅:http://xdebug.org/docs/display。
答案 3 :(得分:2)
我只是用户print_r,以及一些包装函数来存储我放入代码中的各种DebugPrint,还有一个在页脚上将堆栈转储到页面中(或文件中)。
我现在也尝试使用XDebug ...... :-D
好的,为了记录,我给了我的小功能......
// Primitive debug message storage
// $level = "Info", "Warn", "Error", "Title"
function DebugPrint($toDump, $level = "Info") {
global $debugMode, $debugDump, $debugCount;
if ($debugMode != 'N') {
$debugDump[$debugCount++] = "<div class='Dbg$level'>" . $toDump . "</div>\n";
}
}
// Initialize debug information collection
$debugMode = 'N'; // N=no, desactivated, P=dump to Web page, F=dump to file
$debugSavePath = 'C:\www\App\log_debug.txt'; // If mode F
$debugDump = array();
$debugCount = 0;
// Primitive debug message dump
function DebugDump() {
global $debugMode, $debugSavePath, $debugDump, $debugCount;
if ($debugMode == 'F') {
$fp = fopen($debugSavePath, "a"); #open for writing
}
if ($debugCount > 0) {
switch ($debugMode) {
case 'P':
echo '<div style="color: red; background: #8FC; font-size: 24px;">Debug:<br />
';
for ($i = 0; $i < $debugCount; $i++) {
echo $debugDump[$i];
}
echo '</div>
';
break;
case 'F':
for ($i = 0; $i < $debugCount; $i++) {
fputs($fp, $debugDump[$i]);
}
break;
//~ default:
//~ echo "debugMode = $debugMode<br />\n";
}
}
if ($fp != null) {
fputs($fp, "-----\n");
fclose($fp);
}
}
// Pre array dump
function DebugArrayPrint($array) {
global $debugMode;
if ($debugMode != 'N') {
return "<pre class='ArrayPrint'>" . print_r($array, true) . "</pre>";
} else return ""; // Gain some microseconds...
}
兴趣是将输出延迟到页面的末尾,避免使实际页面混乱。
答案 4 :(得分:1)
如果你想避免向浏览器发送错误但希望获得var_dump和print_r的优势,那么请看一下输出缓冲:
ob_start();
var_dump($this); echo $that; print_r($stuff);
$out = ob_get_contents();
ob_end_clean();
user_error($out);
中的一些好读物
答案 5 :(得分:1)
我觉得有些东西在变量转储函数的标准PHP实现中缺乏,即只能打印部分表达式。
这是一个解决这个问题的函数:
function dump($val) {
echo '<pre>'.var_export($val,true).'</pre>';
return $val;
}
现在我可以在表达式周围放置一个函数调用,我需要知道它的值,而不会破坏通常的代码执行流程,如下所示:
$a=2+dump(2*2);
使用鲜为人知的 var_export 我也消除了实现输出缓冲以对结果进行后处理的需要。
答案 6 :(得分:1)
当您生成二进制答案(即使用GD库的图像)时,您可以使用有效的调整标题:
header('X-eleg:'.serialize($yourstuff));
并使用Firefox的Http-header扩展来“窥探”它。
答案 7 :(得分:0)
print_r(),但var_dump()为基元提供了更好的信息。
话虽这么说,我使用Zend Server Debugger完成了大部分实际的调试。
答案 8 :(得分:0)
的var_dump。安装XDebug后,它可以很好地对输出进行格式化和着色(不必在其周围放置<pre>
标签。)