Here’s a little piece of code I use for debugging when I evaluate sites and themes which I don’t know in detail.
I simply drop this in a file and include this file from within the themes’ functions.php or simply by dropping it in wp-content/mu-plugins as something like 0-my-debugging.php or the like.
Then all you need to do is add your remote IP address to the $my_debug_ips array and you’ll receive a log in /tmp/debug.log the next time you reload the page.
This piece of code gives you a log of the queries that are run along with the backtrace from where they were called along with a timestamp.
This makes it relatively easy to identify slow running queries and/or code segments that could benefit from caching.
When define( 'EXPLAIN_QUERIES', true ) is set in the script it will also run a MySQL EXPLAIN on each of the queries that are executed and dump the result to the logfile as well.
It also hooks into http_request_args to log any calls that are made using the HTTP API.
As a bonus you can also use my_var_log( $msg, $trace=true ) somewhere in your code to dump the content of other variables.
$my_start = microtime( true );
$my_debug_ips = array(
'111.222.333.444', // your remote IP address
);
if ( !in_array( $_SERVER['REMOTE_ADDR'], $my_debug_ips ) )
return;
define( 'EXPLAIN_QUERIES', true );
add_filter( 'query', 'my_query_log' );
function my_query_log( $q ) {
my_var_log( $q );
if ( defined( 'EXPLAIN_QUERIES' ) && EXPLAIN_QUERIES ) {
global $wpdb;
remove_filter( 'query', 'my_query_log' );
$res = $wpdb->get_results( $wpdb->prepare( 'EXPLAIN ' . $q ) );
my_var_log( $res, false );
add_filter( 'query', 'my_query_log' );
}
return $q;
}
function my_var_log( $msg, $trace=true ) {
global $my_start;
$time = microtime( true ) - $my_start;
error_log( sprintf( "%s - %.2fs - %s - %s\n", date( 'Y-m-d H:i:s' ), $time, var_export( $msg, true ), $_SERVER['REQUEST_URI'] ), 3, '/tmp/debug.log' );
if ( true === $trace ) {
$trax = array();
$trace = debug_backtrace();
foreach ( $trace as $key => $trc ) {
$trax[$key] = $trc['file'] . '::' . $trc['line'] . ' - ' . $trc['function'];
}
error_log( var_export( $trax, true ) . "\n", 3, '/tmp/debug.log' );
}
}
add_filter( 'http_request_args', 'my_httpapidebug', 10, 2 );
function my_httpapidebug( $r, $url ) {
$r['_url'] = $url;
if ( function_exists( 'my_var_log' ) )
my_var_log( $r );
return $r;
}

September 23, 2011 


No comments yet... Be the first to leave a reply!