X39 – User talk
mNo edit summary |
(moved the old stuff into nowiki tag) |
||
Line 99: | Line 99: | ||
|[[Mission_Editor:_Debug_Console_(Arma 3)|Shipped With Game]] | |[[Mission_Editor:_Debug_Console_(Arma 3)|Shipped With Game]] | ||
|} | |} | ||
[[Category:Arma 3: Editing]] | |||
[[Category:ArmA 2: Editing]] | |||
[[Category:ArmA: Editing]] | |||
[[Category:Operation Flashpoint: Editing]] | |||
[[Category:Scripting Topics]] | |||
----- | ----- | ||
Line 107: | Line 114: | ||
----- | ----- | ||
----- | ----- | ||
<nowiki> | |||
== General debugging techniques == | == General debugging techniques == | ||
=== Addons === | === Addons === | ||
Line 120: | Line 128: | ||
===Keep it simple=== | ===Keep it simple=== | ||
If you're having great difficulty solving a problem, simplify the problem, take the part of the mission which does not work, paste it into a new test mission so that you don't have to watch the effect of the rest of the script(s). | If you're having great difficulty solving a problem, simplify the problem, take the part of the mission which does not work, paste it into a new test mission so that you don't have to watch the effect of the rest of the script(s). | ||
</nowiki> | |||
Revision as of 17:37, 28 December 2018
Rewrite of Debugging_Techniques
Template:SideTOC Template:Quote
For Starters
Debugging is, most of the time, literally as complicated as writing the actual code itself. You usually get hinted by the game, where some error happened, and what it was. However, the actual error reason might be something completely else (eg. you get the error on a variable being nil somewhere, but the actual error is that you misstyped it where you set it initially).
A script error will greet you with this box:
It tells you what went wrong, shows a snippet of the code that failed and, unless you used a command combination like eg. `compile loadFile`, what file and line it occured on. Knowing this, you now can proceed to find the actual reason why you errored on that specific piece of code.
RPT files
A RPT file, is the log file of the game. It will dump debug informations and stuff that went wrong in here. Using commands like diag_log, a scripter also may dump info in here.
For Arma 3, they can be found at (WINDOWS VISTA / 7 / 8):
%userprofile%\AppData\Local\Arma 3
Actual Techniques
Using no tools
The most simple thing you can do, is to add output. This can be done, using for example diag_log. Output yourself a few variables that relate to your problem (for example: When the error occurs because you land in some if block, output the corresponding variables inside of the if). You continue doing this until you hit the actual problem: When variable A is not set, go to where variable A gets set and check around there, repeat and continue.
The same can be done for non-critical errors like when a method is "just" computing the wrong values.
Using Tools
The community developed numerous tools to make debugging easier.
Game | User | Addon-/Toolname | What | Link |
---|---|---|---|---|
-wrong parameter ("Arma") defined!-1.0 | Vektorboson | Debugging console | ||
-wrong parameter ("Arma") defined!-1.0 | Str | Debugging console (addon, available in intros, missions and outros) | ||
-wrong parameter ("Arma") defined!-1.0 | Charon Productions | TroopMon | Debugging system containing informations relevant to mission-makers (especially about AI) | |
1.0 | Str | Debug console | download | |
1.0 | Charon Productions | TroopMon3 | Debugging system containing informations relevant to mission-makers (especially about AI) | download |
? | Kju | DevCon | download | |
1.0 | Chain of Command | Binary gamefile viewer | Allows to check variables and script states in save files | |
1.0 | Bohemia Interactive | -/- | Debug Console capable of executing code and more. | Shipped With Game |
1.0 | Bohemia Interactive | -/- | Debug Console capable of executing code and more. | Shipped With Game |
Old Stuff
== General debugging techniques == === Addons === If you're working with an existing addon, or are developing one, repacking a PBO can be time-intensive, and can be replaced simply by creating a basic mission in the "Missions" or "MPmissions" (if your feature is multiplayer-specific) folder of your game installation, and then running the scenario or mission locally. The easiest way of accomplishing this is by the use of [[Event Scripts]] to run your code such as [[init.sqf]]. Once you have tested your code, using missions in this way, you can then sequentially pack your PBO when major changes have been made, rather than for each debug session of a script or piece of code. === Syntax checking and highlighting === Syntax errors can be a frequent occurrence when developing scripts. There are several methods of determining if the syntax is correct before running scripts; [https://sites.google.com/site/macsarmatools/squint squint] provides a fully-featured code editor which allows for syntax highlighting, displaying of errors and code correction. A simpler solution of code highlighting for Notepad++ is also available [http://www.armaholic.com/page.php?id=8680 here], although errors will only be visible from the absence of highlighting. Using [https://forums.bohemia.net/forums/topic/202181-sqdev-sqf-developing-in-eclipse/ SQDev] you will get code validation (linting) while you are typing it. The plugin will automatically check if you are using all commands with the proper syntax and with proper argument types. === Debugging specific sections of code === Although primitive, the use of [[diag_log]] and [[format]] can be used to debug the content of variables when entering them into functions. In the case that specific pieces of code do not run, or if specific if conditions don't appear to fire, debugging the contents of that specific variable with diag_log can be useful. As with all debugging, so long as the developer is methodical and logical in checking each section of code that runs, finding bugs and resolving them can be straightforward. ===Keep it simple=== If you're having great difficulty solving a problem, simplify the problem, take the part of the mission which does not work, paste it into a new test mission so that you don't have to watch the effect of the rest of the script(s).