Using the debugging tools
If the reason for an error is not immediately obvious, then it is time to use the session debuggers. Each provides an insight into what the platform is processing and the decisions it takes. This can even include watching all the database activity with the SQL debugger. There are many others too!
The session debuggers can be found by navigating to System Diagnostics > Session Debug. Once activated, they will continue while you are logged in and provide you with feedback until you choose to stop (by navigating to System Diagnostics > Session Debug > Disable all), log out, or your session times out. This means that you can enable debugging and then impersonate a user; the debugging will continue. This is critically helpful when you debug security or any other permission issues since an admin account is often treated very differently to a standard user.
Tip
You can also active debugging for a particular application scope with the following function call: gs.enableSessionScopeDebugging...