Отладка кастомных методов

Материал из Umicms
Перейти к:навигация, поиск

Если вы создали кастомный метод, или использовали готовое решение с сайта wiki.umisoft.ru, но метод не работает так как вы ожидали, или на сайте вообще белый экран, то необходимо отлаживать (debug) ваш метод. Вы являетесь разработчиком, раз выполняете подключение кастомным методов, и в первую очередь как раз вы и должны решать возникшие вопросы некорректности работы какого-либо кастомного метода. Перед отладкой, желательно включить debug в конфигурационном файле config.ini, для вашего ip_адреса, а далее использовать любую удобную вам конструкцию, для вывода промежуточных данных вашего метода, для того чтобы понять в чем проблема, на каком месте все ломается, не проходит нужное условие, не приходят нужные данные. К примеру, это может быть:

var_dump($result);
exit;

Подобная конструкция постепенно перемещается по вашему методу, с самого начала до проблемных строк кода.

В некоторых случаях, если не поставить:

exit;

то вы можете не увидеть каких-либо данных, т.к. наша система перед выводом данных сайта очистит буфер, в который попали ваши данные по отладке. Желательно конечно, чтобы данные по отладке были видны только с вашего компьютера, тогда используем конструкцию вида:

if($_SERVER['REMOTE_ADDR'] == '127.127.127.127'){ 
    var_dump($result);
    exit;
}

или:

if($_SERVER['HTTP_X_REAL_IP'] == '127.127.127.127'){
    var_dump($result);
    exit;
 }

вместо 127.127.127.127 – необходимо подставить ip вашего компьютера. Если вы отлаживаете ваш сплиттер для модуля "Обмен данными", не забываем про существование fireBug’a, браузера FireFox, смотря запросы, вкладку "Ответ", можно проверить ваши отладочные данные.

В php есть достаточно полезная функция debug_backtrace, которая позволяет видеть цепочку выполненных методов, перед вызов этой функции в месте отладки. Стандартный вызов следующий:

var_dump(debug_backtrace());
exit;

более удобный вид отображения данных:

if($_SERVER['REMOTE_ADDR'] == '127.127.127.127'){
    $backtrace = debug_backtrace();
    foreach($backtrace as $arr){
      $str = '';
      if(isset($arr['file'])) $str.= 'file: ' . $arr['file'];
      if(isset($arr['line'])) $str.= '<br/> line: ' . $arr['line'];
      if(isset($arr['function'])) $str.= '<br/> function: ' . $arr['function'];
      if(isset($arr['args'])){      
        $str.= '<br/> args: ';
        foreach($arr['args'] as $key => $value){
          $value = (is_object($value)) ? get_class($value) : $value;
          $str.= "[{$key}] => " . $value . '  ';
        }
      }
      echo  $str . '<br/><br/>';   
    } 
    exit;  
 }