Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Debug SilverStripe like a Pro

Debug SilverStripe like a Pro

xdebug talk by Lukas Erni and Werner M. Krauß at SilverStripe EU Conference in Ljubljana, Slovenia 2016 www.stripecon.eu



October 15, 2016


  1. xdebug Debug SilverStripe like a Pro

  2. Who we are Werner M. Krauß alias wmk Hallstatt, Austria

    netwerkstatt.at Family, 2 kids > 5 guitars Lukas Erni alias lerni / munomono Ruswil, Switzerland kraftausdruck.ch Family, 2 kids Beekeeping
  3. Bugs The unknown Beings

  4. None
  5. I could search the bug now. Or I could hammer

    a nail into my knee. Where did I put the nails?
  6. The History of Bugs

  7. 19th Century Hardware Engineering „The first step [in all of

    my inventions] is an intuition, and comes with a burst, then difficulties arise – this thing gives out and [it is] then that ‘Bugs’ – as such little faults and difficulties are called – show themselves […].“ Thomas Edison, 1878
  8. The first Bug • 09.09.1947, Harvard Faculty at the Computation

    Laboratory • Operators traced an error in the Mark II to a moth trapped in a relay, coining the term bug. • This bug was carefully removed and taped to the log book. • source: Wikipedia
  9. So your Talk is about Moths?

  10. None
  11. how this talk came to bee

  12. How this Talk came to Bee I’m personally not much

    of a PHP-Guy. Once in awhile I hang out on IRC or work on a project with Werner and he says "!debug lerni", then the IRC-bot says… lerni: Maybe it's time to start xdebug and see what’s going on... check out http://docs.silverstripe.org/en/developer_guides/debugging/ and http://xdebug.org/docs/
  13. !debug WMK - YOU ARE NOT ALONE https://silverstripe.logged.nz/search.php?q=wmk+%21debug

  14. on stackoverflow, you can find some more ;) https://stackoverflow.com/questions/39405731/silverstripe-could-not-update-record https://stackoverflow.com/questions/38960516/silverstripe-3-1-site-will-not-output-page-ss-template-content

  15. History Of Debugging PHP

  16. Debug History • echo($var); • print_r($array); • die("I'm here"); •

    debug::show(...); • debug::dump(...); • debug::log(...);
  17. debug helpers There are Libs to help you show stuff

    more pretty. Like: https://github.com/raveren/kint
  18. SilverStripe Debug Parameters

  19. SilverStripe Debug Parameters • ?isDev=1 Put the site into development

    mode, enabling debugging messages to the browser on a live server. For security, you'll be asked to log in with an administrator log-in. Will persist for the current browser session. • ?isTest=1 See above. • ?debug=1 Show a collection of debugging information about the director / controller operation • ?debug_request=1 Show all steps of the request from initial HTTPRequest to Controller to Template Rendering
  20. Silverstripe Debug Parameters #2 • ?showqueries=1 List all SQL queries

    executed • ?showtemplate=1 Show the compiled version of all the templates used, including line numbers. Good when you have a syntax error in a template. Cannot be used on a Live site without isDev when logged in as Admin. https://docs.silverstripe.org/en/3.4/developer_guides/debugg ing/ https://docs.silverstripe.org/en/3.4/developer_guides/debugg ing/url_variable_tools/
  21. SilverStripe DebugBar Module

  22. SilverStripe DebugBar Module https://github.com/lekoala/silverstripe-debugbar This module shows a nice DebugBar

    on the bottom of your page • execution time overview. • show messages l($var) to the DebugBar, • trace where queries come from. • ?showqueries=1 and also dump d($obj) look pretty.
  23. SilverStripe DebugBar Module

  24. SilverStripe DebugBar Module - Dump

  25. Debugging Templates

  26. Template Syntax Highlighting • A killer feature of PHPStorm’s SilverStripe

    plugin • Helps you avoid template bugs
  27. Show File Names in Teplates --- Only: environment: 'dev' ---

    SSViewer: source_file_comments: true
  28. Show File Names and Comments Attention: ruins ajax calls that

    output pure templated JSON
  29. Xdebug

  30. so, why xdebug? • On-the-fly debugging • Breakpoints - no

    “leftovers” in your code • Pause and resume execution • Change the value of a variable while the code is running • Pretty backtrace out of the box • Detect @ in the code
  31. How xdebug works • PHP extension (PEAR/PECL) • Installed on

    server • Uses DBGp debugging protocol • Preinstalled on many setups like XAMP or vagrant boxes
  32. Setup MAMP/WAMP • It’s preinstalled • Just enable it

  33. How xdebug works

  34. php.ini • Xdebug slows down execution, just enable what’s needed.

    [xdebug] xdebug.remote_enable=1 debug.remote_host=localhost xdebug.remote_port=9000 Basic localhost:
  35. php.ini zend_extension=/path/to/xdebug.so xdebug.remote_enable = 1 xdebug.remote_connect_back = On xdebug.idekey =

    PHPSTORM Basic vm / dev server:
  36. Useful Setting • Xdebug will disable the @ (shut-up) operator

    • Notices, warnings and errors are no longer hidden • https://xdebug.org/docs/all_set tings xdebug.scream = 1; https://www.flickr.com/photos/gcarvalho/142922427
  37. • Configure server address • Configure path mapping for Remote-Debugging

    • Setup bookmarklets for debugging (and profiling) https://www.jetbrains.com/phpstorm/marklets/ IDE-Setup
  38. Debug Config

  39. Server Config with Path Mapping

  40. Debugger Functions

  41. Tools • Breakpoint • Conditional breakpoint • List of all

    available variables in current scope • Watch • Frames (stack of called functions)
  42. Methods Step Over => goto next line (F8) Step Into

    => go inside a called function or method (F7) Force Step Into => (Shift+Alt+F7 | ⌥⇧F7) Step Out => leave the current function (Shift+F8 | ⇧F8) Run to Cursor => (Alt+F9 | ⌥F9)
  43. More Methods Resume Program => goto next breakpoint (F9 |

    ⌥⌘R) Evaluate Expression => (Alt+F8 | ⌥F8) Quick Evaluate Expression => without dialog (Ctrl+Alt+F8 | ⌥⌘F8) Toggle Breakpoint => (Ctrl+F8 | ⌘F8) View Breakpoints => (Ctrl+Shift+F8 | ⇧⌘F8)
  44. GUI Overview

  45. Live Example

  46. Debugging a Failing Unit Test • Debug (remote) CLI •

    PHPStorm has a good documentation for this • How to use sqlite3 while debugging the unit test? • Terribly slow • https://confluence.jetbrains.com/display/PhpStorm/Debuggi ng+PHP+CLI+scripts+with+PhpStorm
  47. Profile like a Pro

  48. Your Site is too slow (it is..) • Faster machine

    • Opcache • Use lastest and fastest PHP • Partial caching • Static publisher module • ... • Maybe it’s just bad, slow code?
  49. Pro-File it with Xdebug! • Helps finding bottlenecks ◦ useful

    for guitarists! • Runs on the server • Logs time and memory consumption of each function call • Outputs a cachegrind file (can be very big)
  50. • Use bookmarklets for start and stop php.ini xdebug.profiler_enable=0 xdebug.profiler_enable_trigger

    = 1; #enable by trigger xdebug.profiler_output_dir="/path/to/logs/debug" profiling:
  51. Example

  52. Caching helps… Who would have known…?

  53. None
  54. Alternatives

  55. none

  56. None
  57. • Zend Debugger (comes bundled with a Zend Server) •

    phpdbg (bundled with 5.6 but not supported by PhpStorm) ◦ not a real step debugger? Ok, we’ve found some - in Theory
  58. Profiling Alternatives • XHProof • Blackfire • ...

  59. Q&A

  60. Q&A • Does this all make sense to you? •

    How do you handle debugging? • Anybody wants to show something?
  61. Thanks! www.silverstrip.es