SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
4.
“I love suppressing error
messages!” — no one, ever.
5.
So let's start with
WP_DEBUG
define( 'WP_DEBUG', true );
6.
What WP_DEBUG does:
— Sets the error reporting level to
include PHP notices
— Bypasses some error suppression
— Triggers notices for deprecated
usage (more on that later)
7.
You can change its output:
// A default of true forces on display_errors.
define( 'WP_DEBUG_DISPLAY', true );
// Setting it to false will let PHP (php.ini) decide.
define( 'WP_DEBUG_DISPLAY', false );
// So, if your php.ini has display_errors on,
you'll also need to turn it off:
ini_set( 'display_errors', 0 );
8.
Likely being simplified in 3.3:
// A default of true forces on display_errors.
define( 'WP_DEBUG_DISPLAY', true );
// False forces off display_errors.
define( 'WP_DEBUG_DISPLAY', false );
// Null will let PHP (php.ini) decide.
define( 'WP_DEBUG_DISPLAY', null );
9.
You can specify an error log:
// wp-content/debug.log
define( 'WP_DEBUG_LOG', true );
// New in 3.3! (Likely.)
define( 'WP_DEBUG_LOG', '/tmp/php-errors' );
// Follow ticket #18391, created last night.
11.
SCRIPT_DEBUG prevents
minification and concatenation of
core scripts and styles.
load-scripts.php?c=1&load=global,wp-admin,ms…
versus global.dev.css, wp-admin.dev.css, ms.dev.css
12.
SCRIPT_DEBUG is good for:
— Finding bugs in your admin screens
— Studying the admin theme
— Contributing to core
13.
Debug queries with
SAVEQUERIES
define( 'SAVEQUERIES', true );
14.
SAVEQUERIES stores query data in
$wpdb->queries.
(OMG BBQ:
This is NOT for production.)
15.
Query: SELECT * FROM wp_users
WHERE user_login = 'nacin'
Backtrace: WP->init,
wp_get_current_user,
get_currentuserinfo,
wp_validate_auth_cookie,
get_user_by
Execution time: 0.4ms
16.
On using these in production:
WP_DEBUG
— Don't display errors
— Don't log to wp-content/error.log
SCRIPT_DEBUG
— Bad idea.
SAVEQUERIES
— Barry will hunt you down.
18.
Your new best friend:
The Debug Bar
It’s like Firebug for your WordPress.
19.
Debug Bar Console
A Firebug-like console for
PHP and MySQL (really)
20.
What's stopping you from
building your own Debug
Bar extension?
Nothing.
21.
Log Deprecated Notices
— Logs the usage of deprecated files,
functions, and function arguments.
— Pinpoints where the deprecated
functionality is being used.
— NEVER use in production.
22.
Theme Check
— Test your theme for the latest
WordPress standards and practices.
— Required for the theme directory.
23.
Common functions when
debugging
— error_log and var_export / print_r
— var_dump and sometimes die
— debug_backtrace
33.
Step 1
Is your code even running?
(Spell the hook right?)
die( 'wtf' ); or error_log( )
34.
White screen on the
frontend, no errors?
Appearance > Themes
35.
User interface doesn't work?
Check the browser's JS console
for an error, usually a conflict.
36.
Internal server errors?
Infinite redirects. Check:
— home and siteurl
— then .htaccess
— then canonical
37.
Widgets got moved around?
Do the sidebars have IDs?
Otherwise, it's the order in which
register_sidebar() is called.
38.
Lots of pages? Slow site?
My next Q: What's your
permalink structure?
No longer an issue in 3.3!
39.
Weird Bug #1
Somewhere deep in style.css:
“Template: home.php”
Miscalculated as a multisite bug:
activated on single site before
style.css had the headers.
47.
/etc/hosts
127.0.0.1 andrewnacin.com
Configure virtual hosts
Install local WordPress
48.
Replace links with an
output buffer for
development or staging
environments
49.
// Run this on development or staging.
// A development wp-config.php
or local-config.php is fine.
ob_start( 'nacin_dev_urls' );
function nacin_dev_urls( $buffer ) {
$live = 'http://andrewnacin.com';
$dev = 'http://dev.andrewnacin.com';
return str_replace( $live, $dev, $buffer );
}
50.
URLs are more portable
when they're absolute.
Really.*
The serialized stuff is lame though.
51.
Start of a conversation
Xdebug (backtraces, profiling)
KCacheGrind (visualization)
Using an IDE
Unit testing
52.
And finally, remember:
Friends don't let friends
develop without
WP_DEBUG.