Отладка скрипта

При отладке скрипта я использую

  • Дедовские методы: команды echo, print_r

    Голосов: 130 75,1%
  • Отладочные скрипты и классы

    Голосов: 7 4,0%
  • Отладочный Порт

    Голосов: 0 0,0%
  • PHPEdit

    Голосов: 6 3,5%
  • Zend Studio

    Голосов: 14 8,1%
  • что-то иное (написать)

    Голосов: 6 3,5%
  • xdebug

    Голосов: 5 2,9%
  • DBG

    Голосов: 5 2,9%
  • ADP

    Голосов: 0 0,0%

  • Всего проголосовало
    173

Oleg Marchuk

Человек
Я использую некоторую комбинацию.
Если отлаживать мало надо, или я знаю конкретно, на какую переменную мне надо посмотреть - пользуюсь классом Var_Dump (аналог print_r() и var_dump(), только красивее)
Если много чего надо смотреть, или не понятно, где собака зарылась :) - то Zend Studio.
 

Burunduk-13

[CBT], Старожил РНРClub'a
error_reporting=E_ALL + дедовские + xdebug

2[DAN]
>xdebug - вполне приличный отладчик.
>Жаль только, что под виндой он не работает. По крайней мере я так и не смог его настроить.
все очень хорошо работает под винду... надо в php.ini его как extension запускать... (кажеться больше ничего не делал)
 

Dolce

Guest
Что-то я не понял, а неужели никто не пользуется ASSERTIONS? Я вот весь свой код ими снабжаю ;)
 

Dolce

Guest
да, ждём 5ку где будут полноценные try & catch, а пока юзаем assertions. Помогает не ломать готовый код свежими патчами ;)
 

gw128

Guest
4to-to napodobii print_r, no poudobnee.
PHP:
function execFuncOnArr($inArray,$funcName)
{
	if(!function_exists($funcName))
		return $inArray;

	if(!is_array($inArray))
		return is_object($inArray) ? $inArray : $funcName($inArray);

	foreach($inArray as $key=>$val)
		$inArray[$key] = is_array($val) ? execFuncOnArr($val,$funcName) : (is_object($val) ? $val : $funcName($val));
	
	return $inArray;
}


function pr($var)
{
echo "<pre>";
if(is_array($var)){
 $var = execFuncOnArr($var,'htmlspecialchars');
 print_r($var);
}else{
 $var = execFuncOnArr($var,'htmlspecialchars');
 var_dump($var);
}
echo "</pre>";
}
}
i dlja togo, 4toby prosmotret' soderzyvmoe peremennoj (nezavisimo ot tipa)..

pr($variable);
 

RayOfSky

Guest
Блокнотик!

notepad.exe - самое лучшее и простейшее средство для отладки!!!!
командами echo, и print.... а что ещё для счастья нужно?!!!
 

Scarab

Guest
В критичных местах (отправка sql-запросов, обращение к внешним файлам, работа с сокетами) использую дебажный класс, который умеет делать вывод на экран/в файл; а в процессе написания - echo/print_r/die :)
 

GD

Guest
живу под виндой

пробовал Zend Studio:
не удалось прикрутить remote debug - отказался

пробовал xdebug:
xdebug под винду не встает

пробовал Active State Komodo
прикрутился remote debug без проблем, но поглючивает - роняет апач
пока что остановился на нем...
 

mivlad

Guest
Настоятельно рекомендую функцию debug_backtrace.
 

tony2001

TeaM PHPClub
>пробовал xdebug:
>xdebug под винду не встает
встает - см. топик рядом в этом же форуме.
 

Profic

just Profic (PHP5 BetaTeam)
из дедовских: E_ALL, echo, print_r, trigger_error
из отладчиков: dbg + (PHP Expert Editor || PHPEdit)
из редакторов: EditPlus2 :) Подстветка синтаксиса - супер :) Нигде такой не видел...
 

ma2dy

Повернуть землю легко
Все таки как говорит статистика ( см. начало топика)
Старый дедовский echo надежнее всего
 

GD

Guest
tony2001:

win2k
apache 1.3.27
php 4.3.1
xdebug 1.2

при за пуске апач говорит:
The procedure entry point php_var_dump could not be located in the dynamic link library php4ts.dll
следом говорит что не может загрузить xdebug.dll и т.д.
 

tony2001

TeaM PHPClub
xdebug.derickrethans.nl - не сложно заметить, что там написано "PHP 4.3.2 ONLY".
 

MaxIII

Guest
Предпочитаю пользоваться в основном дедовскими методами (дебагерами не пользуюсь принципиально - 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++ компилятора.
 
Сверху