Предпочитаю пользоваться в основном дедовскими методами (дебагерами не пользуюсь принципиально - print_r() хватает с головой)
Я считаю, что трудно написать код, который будет давать непредсказуемые ошибки...
Я не знаю, что подразумевается в голосовалке под "Отладочным портом" - ниже то, как я отлаживаю (наверное я изобрел велосипед
НО!!!
Чтобы видеть в динамике, что происходит "там" пользуюсь следующей методикой.
Работаю следующим образом:
Сервер (Apache/PHP) на линухе. Я на виндузе.
У меня работает "серверная" консоль, которая слушает порт и печатает все пришедшее на экран.
Тоесть, все, что нужно я вижу у себя на машине в динамике, не останавливая выполнение скрипта.
В PHP коде соответственно часть на сокетах, которая отсылает информацию.
Код, который отсылает мне отладочную информацию в релизе не чищу.
Эта глобадбная переменная отвечает за то, выводить или нет эту информацию на другую машину.
В релизе я ее просто инициализирую значением "false".
PHP:
$use_dx_console_to_debug=false;
function array2string($arr,$level=""){
$ret="";
if(is_array($arr))foreach($arr as $k=>$v){
if(is_array($v)){
$ret.=$level."\n{$level}[$k] => array(";
$ret.=array2string($v,$level."\t");
$ret.=$level."\n$level)";
}else{
$ret.=$level."\n{$level}[$k] => $v";
}
}
return $ret;
}
function dx_dbg($str,$forse=false){
global $use_dx_console_to_debug,$scrpt,$dbg_storage,$REMOTE_ADDR;
if(!$use_dx_console_to_debug)return;
if(is_array($str))$str=array2string($str);
if($forse){
$socket = fsockopen ( "192.168.0.8", 1865);
if ($socket==false) { return;}
$str=$dbg_storage."\ndbg[$REMOTE_ADDR:$scrpt]: ".$str;//".session_id()."\r\n
fputs ($socket, $str, strlen ($str));
fclose($socket);
}else {
$dbg_storage.="\n".$str;
}
}
function dx_die($str){
global $use_dx_console_to_debug;
if(!$use_dx_console_to_debug){
echo $str;
exit();
}
dx_dbg($str,true); // для того чтобы сбросить закэшированную очередь сообщений на "сервер".
exit();
return 0;
}
function dx_redir($page2redir){
header("Location: ".$page2redir);
dx_dbg("redir: ".$page2redir,true); // для того чтобы сбросить кэш
exit();
}
В футере:
dx_dbg("",true); // для того чтобы сбросить кэш на мою машину ("сервер") .
В любом "интересном" месте скрипта, в котором я хочу что-то увидеть пишу:
dx_dbg("blah-blah-blah... отладочная информация");
или
dx_dbg( "some array" );
Приаттачить "серверную" консоль не могу
))
Если кому интересно - вышлю с исходниками - откомпилировать или бинарник, у кого под руками нету C++ компилятора.