460 likes | 1.05k Views
The Art of Debugging. Shlomy Gantz 02/13/01 MDCFUG. Introduction - Famous Last words. “…if debugging is defined as the art of taking bugs out of a program , programming must be putting them in…” “..It’s not a bug, It’s a feature “ (Microsoft). Types of bugs. Syntax Error Run-Time Errors
E N D
The Art of Debugging Shlomy Gantz 02/13/01 MDCFUG
Introduction - Famous Last words • “…if debugging is defined as the art of taking bugs out of a program , programming must be putting them in…” • “..It’s not a bug, It’s a feature “ (Microsoft)
Types of bugs • Syntax Error • Run-Time Errors • Logical Errors
Types of bugs - Syntax Errors • Syntax Error Example <CFSET ClientName = “Shlomy Gantz”> <CFSET URLstr = URLstr & urlendcodedformat(ClientName) > View Example
Types of bugs - Run-Time Errors • Run-Time Error Example <CFQUERY NAME=“GetOverPaidEmp” Datasource=“Payroll”> SELECT SUM(Salary) AS TotalSalary, COUNT(Emp_ID) as NumOfEmployees FROM AnnualSalary WHERE SALARY > 100000 </CFQUERY> <CFSET AVGSalary = GetOverPaidEmp.TotalSalary / GetOverPaidEmp.NumOfEmployees > <CFOUTPUT>#AVGSalary#</CFOUTPUT> View Example
Types of bugs - Logical Errors • Logical Error example <CFSET MyList=“Shlomy,Michael,Emily,Abraham”> <CFSET ShlomyExists_YN = listfind(MyList,”shlomy”)> <CFOUTPUT>#YesNoFormat(ShlomyExists_YN)#</CFOUTPUT> View Example
Other things that can go wrong • Database connection (ODBC,MDAC …) • Cold Fusion server • Web Server • OS • Hardware
Debugging Steps • Plan • Back-up • Isolate • Find The error • Fix - Don’t patch • Look for similar • Document
“Debugger’s Block” • If all else fails • … and if that doesn’t work
Enable Performance Monitoring View Example
Enable CFML stack trace • CF tracks what tags have run during page process. • Can be used either through CFTRY/CFCATCH or the Studio Debugger
Show Variables • Show all variables processed by ColdFusion: • FORM • URL • CGI • Cookie
Show Processing Time • Show how long, in milliseconds, it takes for a page process to • run to completion
Detail View • Breakdown of all templates run during a page process. • Proccessing time for each template
Show SQL and Datasource Name • Shows SQL Statement & DSN in error messages
Show Query Information • Query Name • RecordCount • Processing Time • Query Executed
Display Template Path in Error Msg • Show the name of the actual template in which with the error occurred
Restrict Debug Access • By Default All when debugging is turned on all users can see debug information. • You can restrict access to the debugging info through this feature by IP address
Debugging with studio • Setting up Development Mapping.
Debugging CF applications • Show your variables (not only once) • Create breakpoints and Follow the flow • Use Exception handling • Look at your application logs • CF_ObjectDump
<CFABORT> & <CFOUTPUT> • Using CFABORT to create breakpoints <cfinclude template="Header.cfm"> <cfquery datasource="#dsn#" name="getContacts"> Select * from Contacts WHERE Active_YN=1 </cfquery> <cfoutput>#getContacts.recordcount#</cfoutput> <cfabort>
<CFABORT> & <CFOUTPUT> • Following the flow <CFIF …………> Step 1 <CFIF ………………..> Step 1.1 <CFELSE> Step 1.2 </CFIF> <CFELSE> Step 2 </CFIF> View Example
Debugging in CFML • <cfquery debug> • <cfstoredproc debug=“yes|no”> • <cfsetting showdebug output=“yes/no”> View Example View Example
Debugging CF applications • <CFERROR> • <CFTHROW> • <CFRETHROW> • <CFCATCH><CFTRY>
<CFERROR> • <CFERROR TYPE="Request" or "Validation" or "Monitor" or "Exception" TEMPLATE="template_path" MAILTO="email_address" EXCEPTION="exception_type">
<CFTRY><CFCATCH> • <CFTRY> • ... Add code here • <CFCATCH TYPE="exceptiontype"> • ... Add exception processing code here </CFCATCH> • ... Additional CFCATCH blocks go here </CFTRY>
<CFTHROW><CFRETHROW> • <CFTHROW TYPE="exception_type" MESSAGE="message" DETAIL="detail_description" ERRORCODE="error_code" EXTENDEDINFO="additional_information">
Application Logs • Read your application logs regularly Error","TID=199","07/27/00","13:32:35","127.0.0.1","Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)","An error has occurred. HTTP/1.0 404 Object Not Found" "Error","TID=199","07/27/00","13:32:45","127.0.0.1","Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)","Error resolving parameter SLOT_IDColdFusion was unable to determine the value of the parameter. This problem is very likely due to the fact that either: You have misspelled the parameter name, or You have not specified a QUERY attribute for a CFOUTPUT, CFMAIL, or CFTABLE tag.The error occurred while evaluating the expression: #slot_id# The error occurred while processing an element with a general identifier of (#slot_id#), occupying document position (4:12) to (4:20) in the template file D:\wwwroot\cfun2000\Examples\JS\JSexample1_CFMW\edit_def.cfmThe specific sequence of files included or processed is:D:\WWWROOT\CFUN2000\EXAMPLES\JS\JSEXAMPLE1_CFMW\EDIT_DEF.CFM .Date/Time: 07/27/00 13:32:45Browser: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)Remote Address: 127.0.0.1HTTP Referer: http://127.0.0.1/cfun2000/Examples/JS/JSexample1_CFMW/EDIT.HTMLTemplate: D:\wwwroot\cfun2000\Examples\JS\JSexample1_CFMW\edit_def.cfm" "Warning","TID=152","07/27/00","15:07:21","In a CF_TagName construct custom tag file 'C:\CFUSION\CustomTags\Pages.cfm' will occlude custom tag file 'C:\CFUSION\CustomTags\cf_pages\Pages.cfm'." "Warning","TID=152","07/27/00","15:07:21","In a CF_TagName construct custom tag file 'C:\CFUSION\CustomTags\Pages.cfm' will occlude custom tag file 'C:\CFUSION\CustomTags\cf_pages\images\Pages.cfm'." View Example
CF_Objectdump • Read your application logs regularly <CF_ObjectDump Object="#Object#" Deserialize="yes|no" > View Example
Debugging Databases • SQL query analyzer
Debugging JavaScript • “Microsoft Script debugger”/“Netscape JavaScript Debugger” • Using alert() and return false;
Debugging flash • No debug output • simulated flash requests • output in flash
Tools • http://www.secretagents.com/ • BugTraq • http://www.logviewer.com/ • Automatic Code Generation Tools • CodeSaver / CodeCharge / CommerceBlocks
What’s new in 5.0 • Easier Log Analysis
What’s new in 5.0 • New options on CF Admin debug setting
Thank You • Michael Dinowitz, Emily Kim, Michael Imhoff and Abraham Lloyd. • … Michael Smith
QA • Shlomy Gantz shlomygantz@hotmail.com http://www.shlomygantz.com