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
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
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
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/
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
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
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/
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.
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
How xdebug works ● PHP extension (PEAR/PECL) ● Installed on server ● Uses DBGp debugging protocol ● Preinstalled on many setups like XAMP or vagrant boxes
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)
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
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?
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)
● 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:
● 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