Debugging Mediawiki- Part 1

Spread the love

Just set up a PHP Debug environment for Mediawiki. Couldn’t find a good overall documentation for that so writing this blog post. The part 1 of the post includes the different methods that are supported by the Mediawiki software itself. Mediawiki software ensures a lot of Debugging tools for the developers.

It is very important to ensure that the debugging tools are disabled on production sites, they might actually be used by attackers in such cases.
So, here we go:

  • Mediawiki is complex software, PHP commands such as echo will not work.
  • Checking PHP errors- Include this code in LocalSettings.php.
    error_reporting( -1 );
    ini_set( 'display_errors', 1 );
  • Startup errors might be disabled using display_startup_errors which might hide errors even in the above case. To ensure that the above works, add this to top of index.php
    error_reporting( -1 );
    ini_set( 'display_startup_errors', 1 );
    ini_set( 'display_errors', 1 );

Some important Mediawiki configuration variables for debugging

  • $wgShowExceptionDetails: Enable details like stack traces to be shown on the “Fatal error” page.
  • $wgDebugToolbar: Very effective toolbar on all webpages. Contains options of profiling, log messages, PHP includes etc. Can be used to view custom log messages as well.
  • $wgDevelopmentWarnings: Show possible error conditions and for deprecated functions.

View Debug output-Set these configuration values to true in LocalSettings.php

  • $wgShowDebug: Adds a list of “log messages” to the page. Can be used to view all the database queries as well.
  • $wgDebugComments: Adds Debug output as HTML comments for the user.
  • $wgShowSQLErrors: Show SQL errors
  • $wgDebugDumpSql: Show SQL debug dump
  • $wgShowDBErrorBacktrace: Show SQL errors call stack

Adding to the Debug output

  • Debug text passed to function wfDebug() is printed with the Debug output.
  • The call stack can be viewed as text in the Debug data using the function wfBacktrace()

Logging debugging data

A log file can be set up by adding this in LocalSettings.php

    $wgDebugLogFile = "/var/log/mediawiki-debug.log";

Mediawiki allows creation of custom log files and groups.
For instance, to print output of a specific function to a file, use

    wfErrorLog( "Some debug text", '/var/custom-debug.log' );

To create custom log groups, add this to LocalSettings.php

    $wgDebugLogGroups = array(
	'mydebug' => '/var/log/mediawiki-mydebug.log',
    );

Now logging to this group can be done by:

    wfDebugLog( 'mydebug', "Debugging comment" );

Working with Mediawiki objects using PHP

eval.php is an interactive script which allows users to work live with Mediawiki objects and database.
To run it, simply type in terminal:

    php maintenance/eval.php

The script automatically loads Mediawiki classes so can be very handy.
Some examples:

    > print wfMessage( "Recentchanges" )->plain();
    Recent changes

Interaction with the database can be done using the Database Abstraction Layer in Mediawiki. For example:

    > $dbr = wfGetDB( DB_SLAVE );
    > $result = $dbr->select( 'page','page_len' )
    > foreach( $result as $row ) { /* DO SOMETHING */ }

Further ways to access the database can be found here
That’s all for today. In the next post, I will cover Debugging methods using IDEs, they are independent of the application used, Mediawiki in the current case.

You may also like...

No Responses

  1. I just like the valuable info you provide for your articles.
    I’ll bookmark your weblog and check again here regularly.
    I am moderately certain I’ll be told a lot of new stuff right
    right here! Good luck for the following!

  1. December 21, 2014

    […] GCI program. So, gotta complete this long pending draft. Here is the first version of this post- https://crondev.wordpress.com/2014/05/23/debugging-mediawiki-part-1/ The current and the next post aren’t targeted at Mediawiki alone, and are generic for any Web […]

Leave a Reply

Your email address will not be published. Required fields are marked *