<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>naden.de/blog &#187; debugging</title> <atom:link href="http://www.naden.de/blog/tag/debugging/feed" rel="self" type="application/rss+xml" /><link>http://www.naden.de/blog</link> <description>/* no comment */</description> <lastBuildDate>Fri, 30 Jul 2010 09:41:23 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.1</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>PHP Debug Output</title><link>http://www.naden.de/blog/php-debug-output</link> <comments>http://www.naden.de/blog/php-debug-output#comments</comments> <pubDate>Thu, 02 Apr 2009 10:51:55 +0000</pubDate> <dc:creator>naden</dc:creator> <category><![CDATA[Php]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[debugging]]></category> <category><![CDATA[dump]]></category> <category><![CDATA[ob-get-clean]]></category> <category><![CDATA[ob-start]]></category> <category><![CDATA[output]]></category> <category><![CDATA[print-r]]></category> <category><![CDATA[printf]]></category> <category><![CDATA[var-dump]]></category> <category><![CDATA[var-export]]></category><guid
isPermaLink="false">http://www.naden.de/blog/php-debug-output</guid> <description><![CDATA[Grunds&#228;tzlich sollte man nie an einem Livesystem arbeiten. In der Praxis kommt das leider immer mal wieder vor, wenn man kein komplett gespiegeltes System zum Testen hat.
Den Debug Output vor dem Besucher zu verstecken ist oberstes Gebot. Dazu zwei simple L&#246;sungen:
print_r()printf&#40; '&#60;!-- %s --&#62;', print_r&#40; $var, true &#41; &#41;;var_dump()ob_start&#40;&#41;;
var_dump&#40; $var &#41;;
printf&#40; '&#60;!-- %s --&#62;', ob_get_clean&#40;&#41; [...]]]></description> <content:encoded><![CDATA[<p>Grunds&#228;tzlich sollte man nie an einem Livesystem arbeiten. In der Praxis kommt das leider immer mal wieder vor, wenn man kein komplett gespiegeltes System zum Testen hat.<span
id="more-118"></span></p><p>Den Debug Output vor dem Besucher zu verstecken ist oberstes Gebot. Dazu zwei simple L&#246;sungen:</p><p><strong>print_r()</strong></p><div
class="wp_codebox"><table><tr
id="p1184"><td
class="code" id="p118code4"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'&lt;!-- %s --&gt;'</span><span style="color: #339933;">,</span> <span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$var</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p><strong>var_dump()</strong></p><div
class="wp_codebox"><table><tr
id="p1185"><td
class="code" id="p118code5"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">ob_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$var</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'&lt;!-- %s --&gt;'</span><span style="color: #339933;">,</span> <span style="color: #990000;">ob_get_clean</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p><strong>var_export()</strong></p><div
class="wp_codebox"><table><tr
id="p1186"><td
class="code" id="p118code6"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'&lt;!-- %s --&gt;'</span><span style="color: #339933;">,</span> <span style="color: #990000;">var_export</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$var</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>By <a
href="#comment-41717">killerbees</a> liefert allerdings PHP-Code zur&#252;ck.</p><p>Die L&#246;sung mit <em>print_r()</em> gef&#228;llt etwas besser, da sie nur eine einzige Zeile ben&#246;tigt.</p> ]]></content:encoded> <wfw:commentRss>http://www.naden.de/blog/php-debug-output/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Dynamische Paramater&#252;bergabe an PHP Funktionen</title><link>http://www.naden.de/blog/dynamische-paramateruebergabe-an-php-funktionen</link> <comments>http://www.naden.de/blog/dynamische-paramateruebergabe-an-php-funktionen#comments</comments> <pubDate>Mon, 04 Feb 2008 23:02:12 +0000</pubDate> <dc:creator>naden</dc:creator> <category><![CDATA[Php]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[debugging]]></category> <category><![CDATA[paramaterÃƒÂ¼bergabe]]></category><guid
isPermaLink="false">http://www.naden.de/blog/dynamische-paramateruebergabe-an-php-funktionen</guid> <description><![CDATA[Oft m&#246;chte man an eine PHP-Funktion eine nicht genau definierte Menge von Parametern &#252;bergeben, die auch nicht unbedingt immer einen vorher bekannten Type haben.
Sinn macht das immer dann, wenn eine Funktion z.B. zu einer Liste von Kategorie-Nummern Datens&#228;tze liefern soll oder auch f&#252;r Debugzwecke, wenn man einfach s&#228;mtliche &#252;bergebene Funktionsparameter in eine Datei dumpen m&#246;chten.
Hier [...]]]></description> <content:encoded><![CDATA[<p>Oft m&#246;chte man an eine PHP-Funktion eine nicht genau definierte Menge von Parametern &#252;bergeben, die auch nicht unbedingt immer einen vorher bekannten Type haben.<span
id="more-68"></span></p><p>Sinn macht das immer dann, wenn eine Funktion z.B. zu einer Liste von Kategorie-Nummern Datens&#228;tze liefern soll oder auch f&#252;r Debugzwecke, wenn man einfach s&#228;mtliche &#252;bergebene Funktionsparameter in eine Datei dumpen m&#246;chten.</p><p>Hier ein kleines Beispiel f&#252;r eine &#8220;DumpToFile&#8221;-Funktion:</p><div
class="wp_codebox"><table><tr
id="p688"><td
class="code" id="p68code8"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> DumpToFile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">func_num_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$args</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">func_get_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$arg</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
   <span style="color: #990000;">array_push</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$args</span><span style="color: #339933;">,</span> <span style="color: #000088;">$arg</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'dump.log'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'a'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
   <span style="color: #990000;">fprintf</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">', '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fh</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// mögliche Aufrufe</span>
DumpToFile<span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
DumpToFile<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$count</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">223</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Jeder Aufruf erzeugt eine Zeile in der Datei &#8220;dump.log&#8221;. Arrays und Objekte handelt das Beispiel allerdings nicht. Diese werden als &#8220;Array&#8221; oder &#8220;Object&#8221; in der Datei abgelegt.</p> ]]></content:encoded> <wfw:commentRss>http://www.naden.de/blog/dynamische-paramateruebergabe-an-php-funktionen/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Javascript: Clientseitige Fehler tracken</title><link>http://www.naden.de/blog/javascript-clientseitige-fehler-tracken</link> <comments>http://www.naden.de/blog/javascript-clientseitige-fehler-tracken#comments</comments> <pubDate>Sat, 12 May 2007 17:14:17 +0000</pubDate> <dc:creator>naden</dc:creator> <category><![CDATA[Javascript]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[debugging]]></category> <category><![CDATA[error tracking]]></category> <category><![CDATA[javascritp debugging]]></category><guid
isPermaLink="false">http://www.naden.de/blog/javascript-clientseitige-fehler-tracken</guid> <description><![CDATA[Bei der Entwicklung von Webseiten sind die Teile einer Anwendung, die Clientseitig ausgef&#252;hrt werden immer der Flaschenhals des Projekts, da Fehler, die dort durch Browserinkompatibilit&#228;ten auftreten meist das Html, die Stylesheets oder das verwendete Javascript betreffen. Solche Fehler sind oft nur sehr schwer aufzusp&#252;ren, da sich die x m&#246;glichen Client-Konfigurationen nicht alle nachstellen lassen.
Um zumindest [...]]]></description> <content:encoded><![CDATA[<p>Bei der Entwicklung von Webseiten sind die Teile einer Anwendung, die Clientseitig ausgef&#252;hrt werden immer der Flaschenhals des Projekts, da Fehler, die dort durch Browserinkompatibilit&#228;ten auftreten meist das Html, die Stylesheets oder das verwendete Javascript betreffen. Solche Fehler sind oft nur sehr schwer aufzusp&#252;ren, da sich die x m&#246;glichen Client-Konfigurationen nicht alle nachstellen lassen.</p><p>Um zumindest teilweise auf auftretende Javascript-Fehler reagieren zu k&#246;nnen und die programmierten Scripte anzupassen, ist es sinnvoll, Javascript-Fehler zu tracken.<span
id="more-26"></span></p><p>Das geht z.B. &#252;ber einen Z&#228;hlpixel (Web-Bug) und die Javascript Methode window.onerror, die immer dann ausgel&#246;st wird, wenn im Dokument ein Javascript-Fehler auftritt.</p><p>window.onerror bietet nicht nur die Information, das ein Fehler aufgetreten ist, sonder auch noch eine erkl&#228;rende Fehlermeldung, die Url des Dokuments, in dem der Fehler auftrat und einen Fehler-Code.<br
/> Zus&#228;tzlich zu diesen Informationen macht es Sinn, den User-Agent und das Betriebssystem mit zu tracken. Nat&#252;rlich k&#246;nnen beliebige Information wie Cookies, Farbtiefe, die Bildschirmaufl&#246;sung, welche Plugins in welcher Version installiert sind, je nach Bedarf mit getrackt werden.</p><p>Der daf&#252;r notwendige Javascript-Code sieht so aus:</p><div
class="wp_codebox"><table><tr
id="p2612"><td
class="code" id="p26code12"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #000066;">onerror</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> m<span style="color: #339933;">,</span> u<span style="color: #339933;">,</span> n <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">/// Url zum Tracking-Script</span>
	<span style="color: #003366; font-weight: bold;">var</span> url <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/track.php?type=1'</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">/// Hänge weitere Information an</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;m='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> m <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;u='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> u <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;n='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> n <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;dt='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> document.<span style="color: #660066;">title</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;dr='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> document.<span style="color: #660066;">referer</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&amp;os='</span> <span style="color: #339933;">+</span> escape<span style="color: #009900;">&#40;</span> navigator.<span style="color: #660066;">platform</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">/// schreibe einen Web-Bug</span>
	document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'&lt;img src=&quot;'</span> <span style="color: #339933;">+</span> url <span style="color: #339933;">+</span><span style="color: #3366CC;">'&quot; style=&quot;display:none;&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//	alert( 'Fehler wurde getrackt: ' + m + ' (' + n + ')\nUrl: ' + u );</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">/// liefere einen gültigen Wert zurück!</span>
	<span style="color: #000066; font-weight: bold;">return</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div><p>Bei jedem auftretendem Javascript-Fehler wird unsere Tracking-Funktion aufgerufen und meldet die gesammelten Informationen an ein serverseitiges Script, was diese Aufzeichnet.</p><p>window.onerror ist dem Internetexplorer und dem <a
href="http://www.firefox-jetzt.de" target="_blank">Firefox</a> bekannt, der Opera unterst&#252;tzt sie leider nicht. Auch muss man bedenken, das window.onerror nur Fehler abf&#228;ngt, die w&#228;hrend der Scritpabarbeitung auftauchen, setzt man falsche Klammer, wird das nicht erkannt. Aber ein solch fehlerhates Scritp wird ja auch keiner online stellen :)</p><p>Alternativ kann man &#252;ber eine eigene Methode Fehler im aktuellen Script auch g&#228;nzlich unterdr&#252;cken, indem man den Errorhandler wie folgt umbiegt:</p><div
class="wp_codebox"><table><tr
id="p2613"><td
class="code" id="p26code13"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #000066;">onerror</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></pre></td></tr></table></div><p>Testen kann man das Script, indem man mutwillig einen Fehler produziert, z.B. versucht ein Objekt einer nicht vorhandenen Klasse zu instanzieren. Dazu f&#252;gt man den Code innerhalb eines &#038;ltscript&gt;-Tags in eine Html-Datei ein und zus&#228;tzlich die Foglende Zeile:</p><div
class="wp_codebox"><table><tr
id="p2614"><td
class="code" id="p26code14"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> MyPrivateError <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> MyPrivateError<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Ein Demo kann man hier <a
href="http://www.naden.de/blog/wp-content/download/javascript-error-tracking.html" target="_blank">ansehen</a> und hier inklusive der pasenden &#8220;track.php&#8221; <a
href="http://www.naden.de/blog/wp-content/download/javascript-error-tracking.zip" target="_blank">herunterladen</a></p> ]]></content:encoded> <wfw:commentRss>http://www.naden.de/blog/javascript-clientseitige-fehler-tracken/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching 39/49 queries in 0.549 seconds using disk

Served from: arwen @ 2010-07-31 05:19:10 -->