# Debugging & problem solving

## Introduction

Your code should not produce any PHP warnings or notices during normal usage. This primarily implies that all variables must be defined before being used. It also implies that a corrupted installation may produce errors, although as far as practicable the code should accommodate this.&#x20;

{% hint style="warning" %}
By default, all PHP errors, warnings and notices are suppressed and not visible to the public. You can use debugging to show them.&#x20;
{% endhint %}

{% hint style="info" %}
A blank page or a page that has not been fully loaded, usually indicates a PHP fatal error. Server logs (such as Apache Error Logs) often also provide useful information.&#x20;
{% endhint %}

## Browser addon

We recommend this collection of :point\_right: [Firefox Addons](https://addons.mozilla.org/en-US/firefox/collections/camer0n/e107developer/). The most important being the `e107 Debugger`. If you don't wish to use the debugger, you can still activate various [debugging modes](/getting-started/debugging-and-problem-solving.md#debug-modes) manually, by changing the query string of the URL and adding the debug mode. For example: directly after `.php` add `?[debug=xxxx]`

*Example:* `yourwebsite.com/news.php?[debug=basic!]`

## Debug modes

| Query                | Description                                 |
| -------------------- | ------------------------------------------- |
| \[debug=basic!]      | Display basic error information             |
| \[debug=traffic!]    | Display traffic information                 |
| \[debug=showsql!]    | Display basic SQL queries                   |
| \[debug=time!]       | Display load/processing times               |
| \[debug=notice!]     | Display PHP Notices                         |
| \[debug=warn!]       | Display PHP Warnings                        |
| \[debug=backtrace!]  | Display PHP Backtraces                      |
| \[debug=deprecated!] | Display deprecated method or function calls |
| \[debug=inc!]        | Display included files                      |
| \[debug=paths!]      | Display paths and variables                 |
| \[debug=bbsc!]       | Display BBCodes and Shortcodes              |
| \[debug=sc!]         | Display Shortcode placement                 |
| \[debug=sql!]        | Display detailed SQL analysis               |
| \[debug=everything!] | Display all debugging details               |
| \[debug=off!]        | Disable debugging                           |

{% hint style="info" %}
As of e107 v2.3.1 - the `+` sign has been changed to an exclamation mark `!`. \
For example: `[debug=basic!]` instead of `[debug=basic+]`
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devguide.e107.org/getting-started/debugging-and-problem-solving.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
