LBSC 708L Session 1

Download Report

Transcript LBSC 708L Session 1

Debugging and Ajax
Session 7
INFM 718N
Web-Enabled Databases
Agenda
• Debugging
• Teams
• Ajax
• Relational normalization
• Structured programming
• Software patterns
• Object-oriented design
• Functional decomposition
Business Interaction
Design
rules
Interface
Design
Client Hardware
Web Browser
Client-side Programming
Interchange Language
Server-side Programming
(PC)
(IE, Firefox)
(JavaScript)
(HTML, XML)
(PHP)
Database
(MySQL)
Server Hardware
(PC, Unix)
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
<?
require("Sajax.php");
function multiply($x, $y) {
return $x * $y;
}
sajax_init();
// $sajax_debug_mode = 1;
sajax_export("multiply");
sajax_handle_client_request();
?>
<html><head>
<title>Multiplier</title>
<script>
<?
sajax_show_javascript();
?>
function do_multiply_cb(z) {
document.getElementById("z").value = z;
}
function do_multiply() {
// get the folder name
var x, y;
x = document.getElementById("x").value;
y = document.getElementById("y").value;
x_multiply(x, y, do_multiply_cb);
}
</script>
</head>
<body>
<input type="text" name="x" id="x" value="2" size="3">
*
<input type="text" name="y" id="y" value="3" size="3">
=
<input type="text" name="z" id="z" value="" size="3">
<input type="button" name="check" value="Calculate"
onclick="do_multiply(); return false;">
</body></html>
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