СПОСОБЫ ОТЛАДКИПРИ РАЗРАБОТКЕ ПОД MAGENTOПавел НовицкийMeet Magento Belarus 2012
Отладка кода вдвоесложнее, чем его написание.Так что если вы пишете коднастолько умно, насколькоможете, то вы по определен...
Magento в первую очередь — это PHP
Популярные практики при отладке PHP приложений.                   1. Вывод ошибок                   2. Значения переменной...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнени...
Для большинства приложений этого достаточно.             А как же Magento?
Применение стандартных практик в Magento                          Вывод ошибок         error_reporting(E_ALL | E_STRICT); ...
Применение стандартных практик в Magento                  Вывод значения переменной          Только для проверки какой-то ...
Применение стандартных практик в Magento                  Вывод структурных данных          $customer = Mage::getModel(cus...
Применение стандартных практик в Magento                                  Вывод структурных данныхMage_Customer_Model_Cust...
Применение стандартных практик в Magento                        Снова бесполезно?
Применение стандартных практик в Magento                                           Varien_Object::getData()               ...
Применение стандартных практик в Magento                  Вывод структурных данных          $customer = Mage::getModel(cus...
Применение стандартных практик в Magento                 Вывод структурных данных                         [entity_id] => 1...
Применение стандартных практик в Magento                 Отслеживание выполнения кода         debug_backtrace()           ...
Применение стандартных практик в Magento                       Изучение объекта                             get_class()   ...
Применение стандартных практик в Magento                       Запросы к базе данных                            echo $sql ...
Применение стандартных практик в Magento                       Запросы к базе данных                         Вывести запро...
Применение стандартных практик в Magento                           Запросы к базе данных         Mage::getModel(catalog/pr...
Применение стандартных практик в Magento                         Запросы к базе данных           Записываем все запросы в ...
Что ещѐ?
Логирование
Экспериментируем<?phperror_reporting(E_ALL | E_STRICT);ini_set(display_errors, 1);$mageFilename = app/Mage.php;require_onc...
— швейцарский нож разработчика ОТЛАДКА и ПРОФАЙЛИНГ
xDebug                 Установка         http://xdebug.org/download.php                 Настройка         xdebug.profiler_...
xDebug         Настройка NetBeans IDE
xDebug                    И что же нам это даѐт?         http://example.com/index.php?XDEBUG_SESSION_START=netbeans
xDebug         http://example.com/index.php?XDEBUG_SESSION_START=netbeans                      Xdebug helper http://bit.ly...
xDebug          Профайлинг         xdebug.profiler_enable=1
xDebug — профайлинг                      Визуализация логов                Webgrind               http://bit.ly/LXMGFJ    ...
К нам пришѐл клиент…
<disable_local_modules>true</disable_local_modules>
<config>    <modules>        <Some_Module>           <active>false</active>        <Some_Module>    </modules></config>
Magento Connect — developer tools         Commerce Bug http://bit.ly/M8ggqh
Magento Connect — developer tools         Developer Toolbar for Magento http://bit.ly/LnSW8s
Magento Connect — developer tools         Advanced Developer Tools http://bit.ly/Lo1Vqa                            Только ...
Magento Connect — developer tools             Developer Toolbar http://bit.ly/LnD1Hk
Magento Connect — developer tools                          Magento FirePHP http://bit.ly/LnYGyX       Mage::helper(firephp...
Magento Connect — developer tools                 Developer Helper http://bit.ly/OLauwz
СПАСИБО ЗА ВНИМАНИЕ     pavel@belvg.com
Magento code debugging
Upcoming SlideShare
Loading in …5
×

Magento code debugging

2,412 views
2,330 views

Published on

Magento code debugging by Pavel Novitsky

Published in: Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,412
On SlideShare
0
From Embeds
0
Number of Embeds
1,108
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Magento code debugging

  1. 1. СПОСОБЫ ОТЛАДКИПРИ РАЗРАБОТКЕ ПОД MAGENTOПавел НовицкийMeet Magento Belarus 2012
  2. 2. Отладка кода вдвоесложнее, чем его написание.Так что если вы пишете коднастолько умно, насколькоможете, то вы по определениюнедостаточносообразительны, чтобы егоотлаживать.Брайан Керниган
  3. 3. Magento в первую очередь — это PHP
  4. 4. Популярные практики при отладке PHP приложений. 1. Вывод ошибок 2. Значения переменной 3. Структурные данные 4. Отслеживание выполнения кода 5. Исследование объектов 6. Запросы к БД
  5. 5. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Вывод ошибок Непосредственно в приложении: В php.ini: ini_set(display_errors, On); display_errors = On error_reporting(E_ALL | E_STRICT); error_reporting = E_ALL | E_STRICT
  6. 6. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Вывод значения переменной echo $myVar; Практически бесполезно. В большинстве случаев — потраченное зря время.
  7. 7. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Вывод структурных данных echo <pre>. var_dump($myArray); print_r($myArray, true). </pre>; Array ( array(2) { ["key1"]=> string(7) "value 1" ["key2"]=> [key1] => value 1 string(7) "value 2" } [key2] => value 2 )
  8. 8. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Отслеживание выполнения кода debug_backtrace() и print_debug_backtrace()
  9. 9. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Что же у нас за объект? get_class() get_class_vars() get_declared_classes() method_exists()
  10. 10. Популярные практики при отладке PHP приложений. Вывод ошибок Значения переменной Структурные данные Отслеживание выполнения кода Исследование объектов Запросы к БД Запросы к БД a) echo $sql = "SELECT `some_field1` FROM `table` WHERE `some_field2` = $var"; b) $res = mysql_query($sql) or die(mysql_error());
  11. 11. Для большинства приложений этого достаточно. А как же Magento?
  12. 12. Применение стандартных практик в Magento Вывод ошибок error_reporting(E_ALL | E_STRICT); ini_set(display_errors, 1); if (isset($_SERVER[MAGE_IS_DEVELOPER_MODE])) { Mage::setIsDeveloperMode(true); } в .htaccess добавить SetEnv MAGE_IS_DEVELOPER_MODE “true”
  13. 13. Применение стандартных практик в Magento Вывод значения переменной Только для проверки какой-то промежуточной переменной. Точно также бесполезно.
  14. 14. Применение стандартных практик в Magento Вывод структурных данных $customer = Mage::getModel(customer/customer)->load(1); print_r($customer);
  15. 15. Применение стандартных практик в Magento Вывод структурных данныхMage_Customer_Model_Customer Object ( [_eventPrefix:protected] => customer [_eventObject:protected] => customer [_errors:protected] =>Array ( ) [_attributes:protected] => [_addresses:protected] => [_addressesCollection:protected] => [_isDeleteable:protected] => 1 [_isReadonly:protected] => [_resourceName:protected] => customer/customer [_resource:protected] => [_resourceCollectionName:protected] =>customer/customer_collection [_cacheTag:protected] => [_dataSaveAllowed:protected] => 1 [_isObjectNew:protected] => [_data:protected] =>Array ( [entity_id] => 1 [entity_type_id] => 1 [attribute_set_id] => 0 [website_id] => 1 [email] => john.doe@example.com [group_id] => 1 [increment_id] => 000000001 [store_id] => 1 [created_at] => 2007-08-30 23:23:13 [updated_at] => 2008-08-08 12:28:24 [is_active] => 1 [firstname] => John [lastname] => Doe [password_hash] => 2049484a4020ed15d0e4238db22977d5:eg [prefix] => [middlename] => [suffix] =>[taxvat] => [default_billing] => 274 [default_shipping] => 274 ) [_hasDataChanges:protected] => [_origData:protected] => Array ( [entity_id] =>1 [entity_type_id] => 1 [attribute_set_id] => 0 [website_id] => 1 [email] => john.doe@example.com [group_id] => 1 [increment_id] =>000000001 [store_id] => 1 [created_at] => 2007-08-30 23:23:13 [updated_at] => 2008-08-08 12:28:24 [is_active] => 1 [firstname] => John[lastname] => Doe [password_hash] => 2049484a4020ed15d0e4238db22977d5:eg [prefix] => [middlename] => [suffix] => [taxvat] => [default_billing] => 274 [default_shipping] => 274 ) [_idFieldName:protected] => entity_id [_isDeleted:protected] => [_oldFieldsMap:protected] =>Array ( ) [_syncFieldsMap:protected] => Array ( ) )
  16. 16. Применение стандартных практик в Magento Снова бесполезно?
  17. 17. Применение стандартных практик в Magento Varien_Object::getData() Varien_Object::debug()
  18. 18. Применение стандартных практик в Magento Вывод структурных данных $customer = Mage::getModel(customer/customer)->load(1); echo <pre>.print_r($customer->debug(), true);
  19. 19. Применение стандартных практик в Magento Вывод структурных данных [entity_id] => 1 [entity_type_id] => 1 [attribute_set_id] => 0 [website_id] => 1 [email] => john.doe@example.com [group_id] => 1 [increment_id] => 000000001 [store_id] => 1 [created_at] => 2007-08-30 23:23:13 [updated_at] => 2008-08-08 12:28:24 [is_active] => 1 [firstname] => John [lastname] => Doe [password_hash] => 2049484a4020ed15d0e4238db22977d5:eg [prefix] => [middlename] => [suffix] => [taxvat] => [default_billing] => 274 [default_shipping] => 274
  20. 20. Применение стандартных практик в Magento Отслеживание выполнения кода debug_backtrace() Varien_Debug::backtrace() print_debug_backtrace()
  21. 21. Применение стандартных практик в Magento Изучение объекта get_class() get_class_vars() get_declared_classes() method_exists() Используется повсеместно в Magento
  22. 22. Применение стандартных практик в Magento Запросы к базе данных echo $sql = "SELECT `some_field1` FROM `table`”; $res = mysql_query($sql) or die(mysql_error());
  23. 23. Применение стандартных практик в Magento Запросы к базе данных Вывести запрос: $myCollection->load(true); Записать запрос в системный лог: $myCollection->load(false, true);
  24. 24. Применение стандартных практик в Magento Запросы к базе данных Mage::getModel(catalog/product)->getCollection()->load(true); $model = Mage::getModel(catalog/product)->getCollection(); $sql = $model->getSelect()->__toString(); echo $sql; SELECT `e`.* FROM `catalog_product_entity` AS `e`
  25. 25. Применение стандартных практик в Magento Запросы к базе данных Записываем все запросы в var/debug/pdo_mysql.log lib/Varien/Db/Adapter/Pdo/Mysql.php: protected $_debug = true; protected $_logAllQueries= true;
  26. 26. Что ещѐ?
  27. 27. Логирование
  28. 28. Экспериментируем<?phperror_reporting(E_ALL | E_STRICT);ini_set(display_errors, 1);$mageFilename = app/Mage.php;require_once $mageFilename;Mage::setIsDeveloperMode(true);umask(0);Mage::app();// … наш код …
  29. 29. — швейцарский нож разработчика ОТЛАДКА и ПРОФАЙЛИНГ
  30. 30. xDebug Установка http://xdebug.org/download.php Настройка xdebug.profiler_enable_trigger=on xdebug.remote_autostart=off xdebug.remote_enable=1 xdebug.remote_host="127.0.0.1" xdebug.remote_port=9000 xdebug.remote_handler="dbgp" xdebug.idekey="netbeans" xdebug.collect_vars=on xdebug.collect_params=4 xdebug.show_local_vars=on xdebug.var_display_max_depth=5 xdebug.show_exception_trace=on zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so ; zend_extension_ts="c:phpextphp_xdebug-2.0.1-5.2.1.dll"
  31. 31. xDebug Настройка NetBeans IDE
  32. 32. xDebug И что же нам это даѐт? http://example.com/index.php?XDEBUG_SESSION_START=netbeans
  33. 33. xDebug http://example.com/index.php?XDEBUG_SESSION_START=netbeans Xdebug helper http://bit.ly/KuCo2c easy Xdebug http://bit.ly/LKpvjC
  34. 34. xDebug Профайлинг xdebug.profiler_enable=1
  35. 35. xDebug — профайлинг Визуализация логов Webgrind http://bit.ly/LXMGFJ Kcachegrind http://bit.ly/KGzyAw WinCacheGrind http://bit.ly/Nh4iPY Xdebugtoolkit http://bit.ly/LmB4t9 MacCallGrind http://bit.ly/LlerGS CachegrindVisualizer http://bit.ly/OD6dLy
  36. 36. К нам пришѐл клиент…
  37. 37. <disable_local_modules>true</disable_local_modules>
  38. 38. <config> <modules> <Some_Module> <active>false</active> <Some_Module> </modules></config>
  39. 39. Magento Connect — developer tools Commerce Bug http://bit.ly/M8ggqh
  40. 40. Magento Connect — developer tools Developer Toolbar for Magento http://bit.ly/LnSW8s
  41. 41. Magento Connect — developer tools Advanced Developer Tools http://bit.ly/Lo1Vqa Только для версий ниже 1.6.1
  42. 42. Magento Connect — developer tools Developer Toolbar http://bit.ly/LnD1Hk
  43. 43. Magento Connect — developer tools Magento FirePHP http://bit.ly/LnYGyX Mage::helper(firephp)->send(Lorem ipsum sit amet ..); Mage::helper(firephp)->debug(Mage::getModel(catalog/product)->load(54));
  44. 44. Magento Connect — developer tools Developer Helper http://bit.ly/OLauwz
  45. 45. СПАСИБО ЗА ВНИМАНИЕ pavel@belvg.com

×