Meet Magento Belarus debug Pavel Novitsky (rus)

872 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
872
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Meet Magento Belarus debug Pavel Novitsky (rus)

  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

×