## Debug & Caching

...simply doesn't work. If you'd load a page (on a cached request) and doing all those funky things like checking if you're logged in, if you're using an _administrator_-role account, etc. than all this would be bypassed by the caching plugin. The cache gets applied to the resulting HTML page, not the PHP code generating it.

> (...) would a cache plugin like W3 Total Cache help?

**NO**, simply said. Extended explanation: It would make it much more worse. You'd cache all data (if the cache gets generated based on your request) and everyone would get the debug dump served. So do yourself a favor and 

> ALWAYS deactivate caching if you're debugging on a live server.

## How to debug on a live site.

In one of my debug plugins, that I use on live servers, I got the following check on top to abort if none of the criteria is met.

    // Nothing to see here
    if (
    	! is_admin()
    	AND isset( $_GET['debug'] )
    	AND 'true' === $_GET['debug']
    	AND current_user_can( 'manage_options' )
    	AND ( defined( 'DOING_AJAX' ) AND DOING_AJAX )
    	AND ( defined( 'DOING_CRON' ) AND DOING_CRON )
    )
    	return;

So debug output will only be visible if you have the query arg `"?debug=true"` or `"/debug/true"` (depending on permalink settings) appended.

You can also write into a log file (but that shouldn't be done on heavy traffic sites). Here are the lines for a `wp-config.php` file, that will suppress errors, but write them to your log file.

    # DEBUG
    define( 'WP_DEBUG',               true );
    // file: ~/WP_CONTENT_DIR/debug.log
    define( 'WP_DEBUG_LOG',           true );
    define( 'WP_DEBUG_DISPLAY',       true );