﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="generator" content="Adobe RoboHelp 8">
<title>Debugging</title>
<link rel="StyleSheet" href="default.css" type="text/css">
<style type="text/css">
<!--
body { border-left-style:None;
border-right-style:None;
border-bottom-style:None;
background-color:Transparent;
border-top-style:None; }
-->
</style>
<script type="text/javascript" language="JavaScript">
//<![CDATA[
function reDo() {
  if (innerWidth != origWidth || innerHeight != origHeight)
     location.reload();
}
if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
	origWidth = innerWidth;
	origHeight = innerHeight;
	onresize = reDo;
}
onerror = null; 
//]]>
</script>
<style type="text/css">
<!--
div.WebHelpPopupMenu { position:absolute;
left:0px;
top:0px;
z-index:4;
visibility:hidden; }
p.WebHelpNavBar { text-align:right; }
-->
</style>
<script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
<script type="text/javascript" language="javascript" src="whver.js"></script>
<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
<script type="text/javascript" language="javascript1.2" src="whlang.js"></script>
<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.gbWhTopic)
{
	var strUrl = document.location.href;
	var bc = 0;
	var n = strUrl.toLowerCase().indexOf("bc-");
	if(n != -1)
	{
		document.location.href = strUrl.substring(0, n);
		bc = strUrl.substring(n+3);
	}

	if (window.setRelStartPage)
	{
	addTocInfo("Concepts\nDebugging");
addAvenueInfo("Concepts","running.htm","breakpoints.htm");

	}

	document.write("<p style=\"text-align:left\"> ");
AddMasterBreadcrumbs("ide_help.htm", "", "&gt;", "Home", "pdt_table_of_contents.htm");
document.write("<a href=\"concepts.htm\">Concepts<\/a> &gt; Debugging<\/p>");


	if (window.setRelStartPage)
	{
	setRelStartPage("ide_help.htm");

		autoSync(0);
		sendSyncInfo();
		sendAveInfoOut();
	}

}
else
	if (window.gbIE4)
		document.location.reload();
//-->
//]]></script>
</head>

<body><script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(4);
//-->
//]]></script>
<div style="width: 100%; position: relative;" id="header">
	
	
 <p align="right"><a 
	 title="Documentation Survey" href="http://spreadsheets.google.com/viewform?formkey=dC1scEswTjFia2tDQ3Y5TVJBbkNQcWc6MQ">Documentation 
	 Survey</a> 
	 | <a href="javascript:crlf=&quot;&quot;;h=location.href;t=document.title;e = &quot;&quot; + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (e!=null) location=&quot;mailto:documentation@zend.com&quot; + &quot;?Subject= Feedback on PDT for page &quot; + escape(t) + &quot;&amp;Body=&quot; + escape(e).replace(/ /g, &quot;+&quot;) + crlf + &quot; &quot;; void 0"><span 
	 style="background-color: #ffffff;">Submit Documentation</span><span 
	 style="background-color: #ffffff;"> Feedback</span></a><span 
	 style="background-color: #ffffff;"></span><span style="background-color: #ffffff;"> 
	 </span><span style="background-color: #ffffff;">| 
	 </span><span 
	 style="background-color: #ffffff;"><a title="View Latest Version and Get PDF Online" 
											 href="http://www.zend.com/en/resources/zend-documentation/" 
											 target="_blank">View Latest 
	 Version and Get PDF Online</a></span></p>
</div>


<h1>Debugging</h1>
<p>PDT debugging 
 function allows you to test your files and applications and detect errors 
 in your code.</p>
<p>The debugger allows you to control the execution of your program using 
 a variety of options including setting breakpoints, stepping through your 
 code, and inspecting your variables and parameters.</p>
<p>&#160;</p>
<p>PDT includes 
 several different debugging methods as described below:</p>
<p>&#160;</p>
<h3>PHP Script Local Debugging</h3>
<p class="ListBullet1">Allows you to debug files on your workspace using your 
 internal debugger.<br>
The Internal Debugger enables developers to locally validate freshly developed 
 code before deploying to a web server. The internal option means that 
 files located on your workspace can be debugged.  </p>
<p>&#160;</p>
<p>See <a href="locally_debugging_a_php_script.htm">Locally Debugging a 
 PHP Script</a> for more information.</p>






<div>
<p class="Note">Note:</p>
<p class="NoteText">Your server must be running the XDebug in order for remote debugging  capabilities to function.<br>
</p>
</div>
<h3>PHP Web Page Debugging</h3>
<p>Allows you to debug applications situated on a server. It allows you 
 to debug whole applications, including any required interactive user input.</p>

<p class="Note">Note:</p>
<p class="NoteText">It's recommended that your local project structure 
 reflect the project structure on your server.</p>
<p>See <a href="debugging_a_php_web_page.htm">Debugging a PHP Web Page</a> 
 &#160;for more information.</p>
<div>
<p class="Note">Note:</p>
<p class="NoteText">Your server must be running the XDebug in order for remote debugging  capabilities to function.<br>
</p>
</div>












<table cellspacing="0" width="100%">
	<col style="width: 7.093%;">
	<col style="width: 92.907%;">
	<tr style="height: 16px;" valign="top">
		<td style="width: 7.093%; padding-right: 10px; 
												 padding-left: 10px;"><p 
			 style="font-size: 6pt;">&#160;</p></td>
		<td style="width: 92.907%; 
												 padding-right: 10px; padding-left: 10px;"><p>&#160;</p></td>
	</tr>
	<tr style="height: 35px;" valign="top">
		<td style="width: 7.093%; padding-right: 10px; 
												 padding-left: 10px;"><p 
			 style="font-size: 6pt;"><img src="link_icon.png" style="border: none;" alt="link_icon.png" width="32" height="40" border="0"> </p></td>
		<td style="width: 92.907%; 
												 padding-right: 10px; padding-left: 10px;"><p><span 
		 style="font-weight: bold;"><b>Related Links:</b></span><a href="debugging.htm"><br>
		Debugging Files and Applications</a></p>
		<p><a href="analyzing_debugger_results.htm">Running and Analyzing 
		 Debugger Results</a></p></td>
	</tr>
	<tr style="height: 19px;" valign="top">
		<td style="width: 7.093%; padding-right: 10px; 
												 padding-left: 10px;"><p 
			 style="font-size: 6pt;">&#160;</p></td>
		<td style="width: 92.907%; 
												 padding-right: 10px; padding-left: 10px;"><p>&#160;</p></td>
	</tr>
</table>
<div style="width: 100%; position: relative;" id="footer">
	
 <p style="text-decoration: underline; " 
										 align="center">PHP Development 
	 Tools</p>
	
	
</div>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(0);

highlightSearch();
//-->
//]]></script>
</body>
</html>
