1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- EN-Revision: 1.2 Maintainer: perugini Status: working -->
<appendix id="debugger">
<title>Il Debugger PHP</title>
<sect1 id="debugger-using">
<title>Uso del Debugger</title>
<para>
Il debugger interno del PHP è utile per tracciare errori non
visibili.
Il debugger funziona tramite una connessione ad una porta <acronym>TCP</acronym>
che viene attivata ogni volta che viene eseguito il PHP.
Tutti i messaggi di errore generati da quella richiesta, vengono inviati
a questa connessione in TCP. Questa modalità è pensata
per i "server di debugging" che sono eseguiti all'interno di un <acronym>IDE</acronym>
o un editor programmabile (tipo Emacs).</para>
<para>
Come configurare il debugger:
<orderedlist>
<listitem><simpara> Impostare una porta TCP per il debugger nel <link linkend="configuration.file">file di configurazione</link> (<link linkend="ini.debugger.port">debugger.port</link>) e attivarla
(<link linkend="ini.debugger.enabled">debugger.enabled</link>).</simpara></listitem>
<listitem><simpara> Impostare un TCP listener sulla porta scelta (per esempio <command>socket -l -s 1400</command> su UNIX).</simpara></listitem>
<listitem><simpara> Nel tuo codice, esegui "debugger_on(<replaceable>host</replaceable>)", dove
<replaceable>host</replaceable> è l'indirizzo IP o il nome dell'host su cui è in
esecuzione il <acronym>TCP</acronym> listener.</simpara></listitem>
</orderedlist>
Adesso, tutti i messaggi di warning, informazione etc. verranno inviati sul listener socket,
<emphasis>anche se disattivati tramite la funzione <function>error_reporting</function></emphasis>.</para></sect1>
<sect1 id="debugger-protocol">
<title>Protocollo del Debugger</title>
<para>
The debugger protocol is line-based. Each line has a
<emphasis>type</emphasis>, and several lines compose a
<emphasis>message</emphasis>. Each message starts with a line of the
type <literal>start</literal> and terminates with a line of the
type <literal>end</literal>. PHP may send lines for different
messages simultaneously.</para>
<para>
A line has this format:
<informalexample>
<literallayout>
<replaceable>date</replaceable> <replaceable>time</replaceable> <replaceable>host</replaceable>(<replaceable>pid</replaceable>) <replaceable>type</replaceable>: <replaceable>message-data</replaceable>
</literallayout>
</informalexample>
<variablelist>
<varlistentry>
<term><replaceable>date</replaceable></term>
<listitem>
<simpara>Date in ISO 8601 format (<replaceable>yyyy</replaceable>-<replaceable>mm</replaceable>-<replaceable>dd</replaceable>)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>time</replaceable></term>
<listitem>
<simpara>Time including microseconds:
<replaceable>hh</replaceable>:<replaceable>mm</replaceable>:<replaceable>uuuuuu</replaceable>
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>host</replaceable></term>
<listitem>
<simpara>DNS name or IP address of the host where the script
error was generated.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>pid</replaceable></term>
<listitem>
<simpara>PID (process id) on <replaceable>host</replaceable> of
the process with the PHP script that generated this error.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>type</replaceable></term>
<listitem>
<para>Type of line. Tells the receiving program about what
it should treat the following data as:
<table>
<title>Debugger Line Types</title>
<tgroup cols="2">
<thead>
<row>
<entry>Name</entry>
<entry>Meaning</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>start</literal></entry> <entry>Tells the
receiving program that a debugger message starts here.
The contents of <replaceable>data</replaceable> will be
the type of error message, listed below.
</entry>
</row>
<row>
<entry><literal>message</literal></entry>
<entry>The PHP error message.</entry>
</row>
<row>
<entry><literal>location</literal></entry>
<entry>
File name and line number where the error occured. The
first <literal>location</literal> line will always contain
the top-level location. <replaceable>data</replaceable>
will contain
<literal><replaceable>file</replaceable>:<replaceable>line</replaceable></literal>.
There will always be a <literal>location</literal> line
after <literal>message</literal> and after every
<literal>function</literal>.
</entry>
</row>
<row>
<entry><literal>frames</literal></entry> <entry>Number of
frames in the following stack dump. If there are four
frames, expect information about four levels of called
functions. If no "frames" line is given, the depth should
be assumed to be 0 (the error occured at top-level).
</entry>
</row>
<row>
<entry><literal>function</literal></entry> <entry>Name of
function where the error occured. Will be repeated once
for every level in the function call stack.</entry>
</row>
<row>
<entry><literal>end</literal></entry> <entry>Tells the
receiving program that a debugger message ends
here.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>data</replaceable></term>
<listitem>
<simpara>Line data.</simpara>
</listitem>
</varlistentry>
</variablelist>
<table>
<title>Debugger Error Types</title>
<tgroup cols="2">
<thead>
<row>
<entry>Debugger</entry>
<entry>PHP Internal</entry>
</row>
</thead>
<tbody>
<row>
<entry><errortype>warning</errortype></entry>
<entry><errortype>E_WARNING</errortype></entry>
</row>
<row>
<entry><errortype>error</errortype></entry>
<entry><errortype>E_ERROR</errortype></entry>
</row>
<row>
<entry><errortype>parse</errortype></entry>
<entry><errortype>E_PARSE</errortype></entry>
</row>
<row>
<entry><errortype>notice</errortype></entry>
<entry><errortype>E_NOTICE</errortype></entry>
</row>
<row>
<entry><errortype>core-error</errortype></entry>
<entry><errortype>E_CORE_ERROR</errortype></entry>
</row>
<row>
<entry><errortype>core-warning</errortype></entry>
<entry><errortype>E_CORE_WARNING</errortype></entry>
</row>
<row>
<entry><errortype>unknown</errortype></entry>
<entry>(any other)</entry>
</row>
</tbody>
</tgroup>
</table>
<example>
<title>Example Debugger Message</title>
<literallayout>
1998-04-05 23:27:400966 lucifer.guardian.no(20481) start: notice
1998-04-05 23:27:400966 lucifer.guardian.no(20481) message: Uninitialized variable
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: (&null;):7
1998-04-05 23:27:400966 lucifer.guardian.no(20481) frames: 1
1998-04-05 23:27:400966 lucifer.guardian.no(20481) function: display
1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: /home/ssb/public_html/test.php3:10
1998-04-05 23:27:400966 lucifer.guardian.no(20481) end: notice
</literallayout></example>
</para>
</sect1>
</appendix>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
|