Debugging and Ajax
Session 7
INFM 718N
Web-Enabled Databases
Agenda
•	Debugging

•	Ajax

•	Code walkthrough

Types of Errors
•	Syntax errors
–	Detected at compile time

•	Run time exceptions
–	Cause system-detected failures at run time

•	Logic errors
–	Cause unanticipated behavior (detected by you!)

•	Design errors
–	Fail to meet the need (detected by stakeholders)
Debugging Syntax Errors
•	Focus on the first error message
–	Fix one thing at a time

•	The line number is where it was detected
–	It may have been caused much earlier

•	Understand the cause of “warnings”
–	They may give a clue about later errors

•	If all else fails, comment out large code regions
–	If it compiles, the error is in the commented part
Run Time Exceptions
•	Occur when you try to do the impossible
–	Use a null variable, divide by zero, …

•	The cause is almost never where the error is
–	Why is the variable null?

•	Exceptions often indicate a logic error
–	Find why it happened, not just a quick fix!
Debugging Run-Time Exceptions
•	Run the program to get a stack trace
–	Where was this function called from?

•	Print variable values before the failure

•	Reason backwards to find the cause
–	Why do they have these values?

•	If necessary, print some values further back
Logic Errors
•	Evidenced by inappropriate behavior

•	Can’t be automatically detected
–	“Inappropriate” is subjective

•	Sometimes very hard to detect
–	Sometimes dependent on user behavior
–	Sometimes (apparently) random

•	Cause can be hard to pin down
Debugging Logic Errors
•	First, look where the bad data was created

•	If that fails, print variables at key locations
–	if (DEBUG) echo “\$foobar = $foobar”;

•	Examine output for unexpected patterns

•	Once found, proceed as for run time errors
–	define (“DEBUG”, FALSE); to clean the output

Ajax Applications
•	Google Maps
–	http://maps.google.com
•	Google Suggest
–	http://www.google.com/webhp?complete=1&hl=en
•	Sajax Tables
–	http://labs.revision10.com/?p=5
•	Sajax
–	http://www.modernmethod.com/sajax/
Sajax Example

Code Walkthrough
Syntax
•	How layout helps reading
•	How variables are named
•	How strings are used
•	How forms are used
•	How output is created

MySQL Integration
•	Opening a database
•	Handling slashes
•	Posing queries
•	Using result sets
Structured Programming
•	How things are nested
•	How arrays are used

Modular Programming
•	Functional decomposition
•	How functions are invoked
•	How arguments work
•	How scope is managed
•	How errors are handled
•	How results are passed