fearlex
7/26/2016 - 2:15 AM

A few handy functions for debugging PHP script execution in WordPress/WooCommerce.

A few handy functions for debugging PHP script execution in WordPress/WooCommerce.

<?php
/**
 * Plugin Name: Brent's Debugging Helpers
 * Plugin URI:
 * Description: bs_backtrace() etc.
 * Version: 8.13.21
 * Author:
 * Author URI:
 */

if ( ! defined( 'bs_backtrace' ) ) {
	function bs_backtrace( $method ) {
		ob_start();
		debug_print_backtrace();
		$back_trace = ob_get_clean();
		//array_shift( $back_trace );
		error_log( 'In ' . $method . '() debug_print_backtrace() = ' . "\n" . print_r( $back_trace, true ) );
	}
}

if ( ! defined( 'bs_log_request_actions' ) ) {
	function bs_log_request_actions() {
		add_action( 'shutdown', function(){
			bs_log_actions();
		});
	}
}

function bs_log_actions() {
	error_log( 'wp_actions = ' . print_r( $GLOBALS['wp_actions'], true ) ); 
}

if ( ! defined( 'bs_log_request_filters' ) ) {
	function bs_log_request_filters() {
		add_action( 'shutdown', function(){
			bs_log_filters();
		});
	}
}

function bs_log_filters( $filter_name = '' ) {

	if ( ! empty( $filter_name ) ) {
		error_log( 'wp_filter[ ' . $filter_name . ' = ' . print_r( $GLOBALS['wp_filter'][ $filter_name ], true ) ); 
	} else {
		error_log( 'wp_filter = ' . print_r( $GLOBALS['wp_filter'], true ) ); 
	}
}


/**
 * Script Timing Functions
 */
function bs_start_script_clock() {
	$dat = getrusage();
	define( 'BS_PHP_TUSAGE', microtime( true ) );
	define( 'BS_PHP_RUSAGE', $dat["ru_utime.tv_sec"] * 1e6 + $dat["ru_utime.tv_usec"] );
}

function bs_get_script_time() {
	return ( microtime( true ) - BS_PHP_TUSAGE );
}

function bs_get_script_time_in_seconds() {
	return bs_get_script_time() * 1000000;
}

/**
 * Code Based on: http://php.webtutor.pl/en/2011/05/13/how-to-calculate-cpu-usage-of-a-php-script/
 */
function bs_get_cpu_usage() {
	$dat = getrusage();
	$dat["ru_utime.tv_usec"] = ($dat["ru_utime.tv_sec"]*1e6 + $dat["ru_utime.tv_usec"]) - BS_PHP_RUSAGE;
	$time = bs_get_script_time_in_seconds();

	// cpu per request
	if( $time > 0 ) {
		$cpu = sprintf( "%01.2f", ( $dat["ru_utime.tv_usec"] / $time ) * 100 );
	} else {
		$cpu = '0.00';
	}

	return $cpu;
}