This is a documentation for Board Game Arena: play board games online !

Practical debugging: Atšķirības starp versijām

No ''Board Game Arena''
Pāriet uz navigāciju Pāriet uz meklēšanu
No edit summary
1. rindiņa: 1. rindiņa:


This page gives you practical tips to debug your game during the development. Don't hesitate to share with us your difficulties in order we can improve this section.
This page gives you practical tips to debug your game during the development. Don't hesitate to share with us your difficulties in order we can improve this section.
== Tools ==
=== Browsers ===
To work on BGA Studio, we recommend you to use [www.google.com/chrome Google Chrome] as it's the current fastest browser for BGA platform, and it's available in all OS.
Another reason to use Chrome is that it embed all tools you need to work on BGA Studio. You can see them by pressing "F12" or from the menu ("Tools > Development tools").
A good practice is to use a second browser to develop the game, in order to check that your game is working fine on this browser too.
To debug with Firefox browser, we advise you to use these 2 extensions:
* [https://addons.mozilla.org/firefox/addon/firebug/ Firebug]
* [https://addons.mozilla.org/firefox/addon/web-developer/ Web developper]
To debug with Internet Explorer, we advise you to use one of the most recent version (ex: IE9). Last versions of Internet Explorer have way better development tools than the previous ones...
== General tooltip for debugging ==
In general for debugging, think of using the '[[Tools_and_tips_of_BGA_Studio#Save_.26_restore_state|save & restore]] state' functionality. It enables you to save the state of your game just before the issue you are investigating, then come back to that point with one click as many times as needed to understand what is going wrong.
You can save up to 3 different states.


== Debugging my game when it cannot start ==
== Debugging my game when it cannot start ==
18. rindiņa: 40. rindiņa:
* Another possibility for this is to place a '''die('ok');''' PHP statement right after the PHP I am developing/debugging. This way, I make sure that every request will fail and then nothing will be commited to the database, anyway.
* Another possibility for this is to place a '''die('ok');''' PHP statement right after the PHP I am developing/debugging. This way, I make sure that every request will fail and then nothing will be commited to the database, anyway.
* Then, I use '''var_dump''' function to dump PHP variables and check what's wrong, until it works.
* Then, I use '''var_dump''' function to dump PHP variables and check what's wrong, until it works.
Example:
<pre>
// (...my code to debug)
var_dump( $my_variable );
die('ok');
// (...my code to debug)
</pre>


== Debugging my HTML/CSS layout ==
== Debugging my HTML/CSS layout ==
28. rindiņa: 62. rindiņa:
== What is the best way to debug? ==
== What is the best way to debug? ==


On the server side (PHP), you can use one of these:
 
* die(var_dump( $variable_to_inspect );
* throw new BgaUserException(var_dump( $variable_to_inspect );


On the client side (Javascript), we recommand installing Firebug for Firefox (or using the 'Developer tools' with Chrome that have about the same functionalities), then:
On the client side (Javascript), we recommand installing Firebug for Firefox (or using the 'Developer tools' with Chrome that have about the same functionalities), then:
36. rindiņa: 68. rindiņa:
* alert( variable_to_inspect ); will popup what you wish and pause the execution until you click ok. This won't be useful for complex structures, only native types will get plainly displayed. But this is sometimes useful just with messages to make sure which way the execution goes.
* alert( variable_to_inspect ); will popup what you wish and pause the execution until you click ok. This won't be useful for complex structures, only native types will get plainly displayed. But this is sometimes useful just with messages to make sure which way the execution goes.


In general for debugging, think of using the 'Save & restore state' functionality. It enables you to save the state of your game just before the issue you are investigating, then come back to that point with one click as many times as needed to understand what is going wrong. You can save up to 3 different states.
 


=== Some frequent errors ===
=== Some frequent errors ===

Versija, kas saglabāta 2013. gada 29. janvāris, plkst. 23.29

This page gives you practical tips to debug your game during the development. Don't hesitate to share with us your difficulties in order we can improve this section.

Tools

Browsers

To work on BGA Studio, we recommend you to use [www.google.com/chrome Google Chrome] as it's the current fastest browser for BGA platform, and it's available in all OS.

Another reason to use Chrome is that it embed all tools you need to work on BGA Studio. You can see them by pressing "F12" or from the menu ("Tools > Development tools").

A good practice is to use a second browser to develop the game, in order to check that your game is working fine on this browser too.

To debug with Firefox browser, we advise you to use these 2 extensions:

To debug with Internet Explorer, we advise you to use one of the most recent version (ex: IE9). Last versions of Internet Explorer have way better development tools than the previous ones...

General tooltip for debugging

In general for debugging, think of using the 'save & restore state' functionality. It enables you to save the state of your game just before the issue you are investigating, then come back to that point with one click as many times as needed to understand what is going wrong.

You can save up to 3 different states.

Debugging my game when it cannot start

If your game don't start because of an error, you are probably in one of these situations:

  • There is a SQL error in your dbmodel.sql file.
  • You have a syntax error in your PHP file.
  • Your PHP "setup" - or any method used during the game initial states - generates an exception.

If the error is not explicitly displayed when you click on "Express start", you should check the "Gameserver error log" in the Studio backoffice.

Debugging my PHP game logic (or my view)

Most of the time, debugging PHP is quite easy. Here's what I do when I want to develop/debug some game logic that is triggered by some game action:

  • At first, I make sure that I can reproduce the needed game situation in one click. To do this, I use the "save & restore" function.
  • Another possibility for this is to place a die('ok'); PHP statement right after the PHP I am developing/debugging. This way, I make sure that every request will fail and then nothing will be commited to the database, anyway.
  • Then, I use var_dump function to dump PHP variables and check what's wrong, until it works.

Example:


// (...my code to debug)

var_dump( $my_variable );
die('ok');

// (...my code to debug)

Debugging my HTML/CSS layout

Debugging my Javascript game interface logic

Some frequent errors

What is the best way to debug?

On the client side (Javascript), we recommand installing Firebug for Firefox (or using the 'Developer tools' with Chrome that have about the same functionalities), then:

  • console.log( variable_to_inspect ); will give you the object structure of the variable in the Firebug console, without blocking the execution. It's often a good idea to precede this call with a console.log( '### HERE ###' ); to find more easily the appropriate line in the console log.
  • alert( variable_to_inspect ); will popup what you wish and pause the execution until you click ok. This won't be useful for complex structures, only native types will get plainly displayed. But this is sometimes useful just with messages to make sure which way the execution goes.


Some frequent errors

The following error occurs when launching the game "Fatal error during creation of database ebd_quoridor_389 Not logged."
Check that you didn't use $g_user or getCurrentPlayerId() in setupNewGame() function or in an "args" function of your state. As these functions are not consequences of a user action, there is no current player defined. As a general rule, you should use getActivePlayerId() and not getCurrentPlayerId(). See the presentation on the game state machine for more information.