SCI/FreeSCI/Kernel hacking/Error handling and debugging

From ScummVM :: Wiki
Jump to navigation Jump to search

Error handling and debugging

Error handling and debugging probably are the most important aspects of program writing. FreeSCI provides three macros for printing debug output:

SCIkwarn(text, ...)
Print a warning message
SCIkdebug(text, ...)
Print a debug message
CHECK_THIS_KERNEL_FUNCTION
print the function name and parameters

The difference between SCIkwarn and SCIkdebug is that the latter can be easily removed (by commenting out the #define SCI_KERNEL_DEBUG on or about line 39). In practice this means that SCIkwarn should be used for warning or error messages in cases where it is likely that the vm or the kernel function are doing something wrong; e.g. if the program refers to a non-existant resource file, if a node list command does not come with a pointer to a node list, or if the number of parameters is insufficient. These messages are important and may point to misperceptions of details of the SCI engine. SCIkdebug, on the other hand, is your every-day "flood me with information until I'm blind" debug macro.

Sometimes it may happen that something goes wrong inside the kernel; e.g. a kernel function runs out of memory handles, or an internal variable somehow was set to an invalid value. In this case, kernel_oops(state_t *, char *) should be used. It prints an error message and halts the VM, which none of the macros does.