【发布时间】:2014-08-28 18:18:59
【问题描述】:
我有一个什么都不做的脚本。它甚至没有在脚本的第一行返回回显??
我所有的其他脚本都可以工作,它们相似,具有相同的权限并且位于同一个文件夹中。
它在远程网络空间中运行。我该如何调试?
【问题讨论】:
标签: php remote-debugging
我有一个什么都不做的脚本。它甚至没有在脚本的第一行返回回显??
我所有的其他脚本都可以工作,它们相似,具有相同的权限并且位于同一个文件夹中。
它在远程网络空间中运行。我该如何调试?
【问题讨论】:
标签: php remote-debugging
将下面的行放在脚本的顶部。
ini_set('display_errors', 'On');
error_reporting(E_ALL);
如果脚本中有任何错误,它会告诉你。
【讨论】:
检查您的 php.ini 设置。
在你的 php.ini 中:
display_errors = On
error_reporting = E_ALL
然后重新启动您的网络服务器并重试。
【讨论】:
作为一名程序员,知道使用调试工具会很方便。 我建议你使用xdebug
【讨论】:
作为最后的手段,(正如其他人提到的首选方式)
您可以注释掉所有代码,并回溯代码告诉它停止,只需注意 if{ } 块和其他控制结构。 例如..说你有这个代码。
<?php
function do_nothing(){
}
$somthing = 1;
if($something){
do_nothing();
}
$badCode = 'hello'
$array = array(1,2,3,4,5);
foreach($array as $item ){
echo 'item: '.$item;
}
什么都不输出,因为它坏了。
你可以
<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
do_nothing();
}
$badCode = 'hello'
$array = array(1,2,3,4,5);
foreach($array as $item ){
echo 'item: '.$item;
}
*/
echo 'works';
输出
'works'
然后继续
<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
do_nothing();
}
$badCode = 'hello'
*/
$array = array(1,2,3,4,5); //need this for the loop
foreach($array as $item ){
//don't comment half this block
echo 'item: '.$item;
}
echo 'works';
输出
'item: 1'
'item: 2'
'item: 3'
'item: 4'
'item: 5'
'works'
最后
<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
do_nothing();
}
*/
$badCode = 'hello'
$array = array(1,2,3,4,5); //need this for the loop
foreach($array as $item ){
//don't comment half this block
echo 'item: '.$item;
}
echo 'works';
损坏,(缺少分号 $badCode = 'hello';)
可以肯定的是,这是一种基本的调试方式。但是如果您尊重控制块,它将在 100% 的时间内工作..
还要确保熟悉不同的打印功能。
我敢肯定还有更多,但这些是最常见的。使用<pre> 也很有用
在打印对象和数组之前标记以保留空白并使其易于阅读。
我也喜欢用这个小功能(它可以告诉你你是从哪一行打印出来的)
/**
* export a variable with line number from backtrace using offset
* @param mixed $var
* @param int $offset
*/
function print_debug($var=null, $offset=0){
$stacktrace = debug_backtrace(false);
$trace = $stacktrace[$offset];
extract($trace);
echo "<span style='color: #CCC;'> Output from FILE[ $file ] LINE[ $line ]</span>";
echo "<pre>";
var_export($var);
echo "</pre>";
}
【讨论】: