When developing all but the most straightforward Visualforce pages, it is highly likely that bugs will be encountered in the business logic, either the Apex controller code or JavaScript executing in the page. In order to identify where in the logic the problem lies, the bug must be reproduced with a mechanism to surface information about the internal state of the page.
The Apex debug log contains a wealth of information about a request to the server, including method entry/exit, database interaction (SOQL and DML), and errors.
Note
As the Apex debug log has a maximum size of 2 MB, and a Salesforce org is limited to 50 MB of debug logs, a common approach for developers new to the Salesforce platform is to attempt to capture debug information in custom objects. However, custom object instances are only written to the Salesforce database when a transaction successfully completes, which means that when an error occurs and the transaction is rolled back, no information about...