<?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>Web Development Notes &#187; debug</title>
	<atom:link href="http://blog.eood.cn/tag/debug/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.eood.cn</link>
	<description>PHP, Drupal, Erlang, MySQL, Java, MongoDB, Linux, vim, ssh, screen etc</description>
	<lastBuildDate>Sat, 31 Dec 2011 12:49:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>高效程序调试和测试方法</title>
		<link>http://blog.eood.cn/efficient_debugging_php_java_python</link>
		<comments>http://blog.eood.cn/efficient_debugging_php_java_python#comments</comments>
		<pubDate>Sun, 28 Nov 2010 03:26:30 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[My Thinking]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1419</guid>
		<description><![CDATA[调试程序往往比编写程序更浪费时间，正如一些有经验的程序员所说，软件的开发应该包括20%的程序编写时间和80%的Debug时间。并且调试程序比编写程序要难2倍。编写巧妙的程序并不一定调试方便。 程序的调试有很多方法，比如最常见的VC之类的IDE都提供加断点，逐步执行，逐段执行的功能。但是这只能针对程序某个微小的片段，对于前期bug的范围的界定并不是很方便。况且对于不满IDE的臃肿，身陷Vim, notepad++, Editplus之类的编辑器之中，我们需要找到更加高效的程序调试和测试方法。 在程序执行的关键点打印Log是一个非常高效的方法，如何打印log进行程序调试呢? 以PHP程序开发为例，需要2个步骤: 1. PHP函数中两个关键的打印变量的方法 print_r var_dump 所以我们可以在关键的地方打印需要的变量。 2. 收集我们在程序中打印的变量 我们可以把程序执行过程中打印的变量逐条写到文本文件里。在程序执行完毕之后进行分析，查找Bug，修正程序。 PHP中打印时间，和变量的程序片段： function file_log($message) { global $file_log_location; ob_start(); echo date("Y-m-d H:i:s \t", time()); print_r($message); echo "\n"; $var = ob_get_contents(); ob_end_clean(); $open=@fopen($file_log_location,"a"); @fwrite($open,$var); fclose($open); } 应用此段程序还需要对log的存储位置$file_log_location赋值。 在需要的地方插入此片段，执行PHP程序，就会得到所需信息。 但是假如是长时间运行的程序如何在程序执行的过程中就查看到log的信息？相信你已经想到了可以在shell中用 tail -f /var/debug.log 这样总可以看到程序吐出的最新的debug信息。 附件是Drupal中进行debug的一个小的module,做drupal开发的同学可以尝试一下。 Drupal debug module 虽然本文针对PHP开发所言，但是这种方法也适合python,java之类的动态语言的开发。 &#8211;EOF&#8211;]]></description>
			<content:encoded><![CDATA[<blockquote><p>调试程序往往比编写程序更浪费时间，正如一些有经验的程序员所说，软件的开发应该包括20%的程序编写时间和80%的Debug时间。并且调试程序比编写程序要难2倍。编写巧妙的程序并不一定调试方便。</p></blockquote>
<p><img class="alignright size-full wp-image-1435" title="debug" src="http://blog.eood.cn/wp-content/uploads/2010/11/debug.gif" alt="" width="410" height="171" />程序的调试有很多方法，比如最常见的VC之类的IDE都提供加断点，逐步执行，逐段执行的功能。但是这只能针对程序某个微小的片段，对于前期bug的范围的界定并不是很方便。况且对于不满IDE的臃肿，身陷Vim, notepad++, Editplus之类的编辑器之中，我们需要找到更加高效的程序调试和测试方法。</p>
<p>在程序执行的关键点打印Log是一个非常高效的方法，如何打印log进行程序调试呢? 以PHP程序开发为例，需要2个步骤:</p>
<h4>1. PHP函数中两个关键的打印变量的方法</h4>
<p><em><span style="color: #000000;">print_r var_dump</span></em></p>
<p>所以我们可以在关键的地方打印需要的变量。</p>
<h4>2. 收集我们在程序中打印的变量</h4>
<p>我们可以把程序执行过程中打印的变量逐条写到文本文件里。在程序执行完毕之后进行分析，查找Bug，修正程序。</p>
<p>PHP中打印时间，和变量的程序片段：</p>
<pre>function file_log($message) {
    global $file_log_location;
    ob_start();
    echo date("Y-m-d H:i:s \t", time());
    print_r($message);
    echo "\n";
    $var = ob_get_contents();
    ob_end_clean();
    $open=@fopen($file_log_location,"a");
    @fwrite($open,$var);
    fclose($open);
}
</pre>
<p>应用此段程序还需要对log的存储位置<em><span style="color: #000000;">$file_log_location</span></em>赋值。</p>
<p>在需要的地方插入此片段，执行PHP程序，就会得到所需信息。</p>
<p>但是假如是长时间运行的程序如何在程序执行的过程中就查看到log的信息？相信你已经想到了可以在shell中用</p>
<p><em><span style="color: #000000;">tail -f /var/debug.log</span></em></p>
<p>这样总可以看到程序吐出的最新的debug信息。</p>
<p>附件是Drupal中进行debug的一个小的module,做drupal开发的同学可以尝试一下。</p>
<p><a href="http://blog.eood.cn/wp-content/uploads/2010/11/filelog_0.zip">Drupal debug module</a></p>
<p>虽然本文针对PHP开发所言，但是这种方法也适合python,java之类的动态语言的开发。</p>
<p>&#8211;EOF&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eood.cn/efficient_debugging_php_java_python/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debug javascript or do automatic javascript testing</title>
		<link>http://blog.eood.cn/debug-javascript-or-do-automatic-javascript-testing</link>
		<comments>http://blog.eood.cn/debug-javascript-or-do-automatic-javascript-testing#comments</comments>
		<pubDate>Wed, 26 May 2010 14:20:39 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Frontend Design]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1088</guid>
		<description><![CDATA[Tools: Firefox &#38; Firebug or Safari Library: function ConsoleLogger(level) { this.level=level&#124;&#124;4; this.start=function(){}; this.log=function(msg,level){ level=level&#124;&#124;0; if(level&#62;this.level)return; if(typeof(console)==&#8217;undefined&#8217;)return; try{ switch(level){case 0:console.warn(msg);break; case 1:console.error(msg);break; case 2:console.info(msg);break; case 4:console.debug(msg);break; default:console.log(msg);break; } }catch(e){ try{console.log(msg)}catch(e){} } }; this.setLevel=function(level){ this.level=level;return this; }; this.getLevel=function(){ return this.level; }; } Example: oDbg = new ConsoleLogger(2); oDbg.log(&#8220;warn info: &#8230;.&#8221;, 0); oDbg.log(&#8220;error info: &#8230;.&#8221;, 1); oDbg.log(&#8220;info info: [...]]]></description>
			<content:encoded><![CDATA[<p>Tools: Firefox &amp; Firebug or Safari<br />
Library:<br />
function ConsoleLogger(level)<br />
{<br />
this.level=level||4;<br />
this.start=function(){};<br />
this.log=function(msg,level){<br />
level=level||0;<br />
if(level&gt;this.level)return;<br />
if(typeof(console)==&#8217;undefined&#8217;)return;<br />
try{<br />
switch(level){case 0:console.warn(msg);break;<br />
case 1:console.error(msg);break;<br />
case 2:console.info(msg);break;<br />
case 4:console.debug(msg);break;<br />
default:console.log(msg);break;<br />
}<br />
}catch(e){<br />
try{console.log(msg)}catch(e){}<br />
}<br />
};<br />
this.setLevel=function(level){<br />
this.level=level;return this;<br />
};<br />
this.getLevel=function(){<br />
return this.level;<br />
};<br />
}<br />
Example:<br />
oDbg = new ConsoleLogger(2);<br />
oDbg.log(&#8220;warn info: &#8230;.&#8221;, 0);<br />
oDbg.log(&#8220;error info: &#8230;.&#8221;, 1);<br />
oDbg.log(&#8220;info info: &#8230;.&#8221;, 2);<br />
oDbg.log(&#8220;debug info: &#8230;.&#8221;, 4);</p>
<p>You can get the debug information in the console of Firebug.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eood.cn/debug-javascript-or-do-automatic-javascript-testing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debug javascript manually</title>
		<link>http://blog.eood.cn/debug-javascript-manually</link>
		<comments>http://blog.eood.cn/debug-javascript-manually#comments</comments>
		<pubDate>Wed, 26 May 2010 14:17:12 +0000</pubDate>
		<dc:creator>Bruce Dou</dc:creator>
				<category><![CDATA[Frontend Design]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.eood.cn/?p=1080</guid>
		<description><![CDATA[try { &#8230; YOUR JAVASCRIPT CODE &#8230; } catch (e) { for (myBug in e) { alert (&#8220;e["myBug +"] = &#8220;+e[myKey]); } } Surround your JavaScript code with try catch, run the code in your browser, then you will see every error in your codes.]]></description>
			<content:encoded><![CDATA[<p>try {<br />
&#8230;<br />
YOUR JAVASCRIPT CODE<br />
&#8230;<br />
} catch (e) {<br />
for (myBug in e) {<br />
alert (&#8220;e["myBug +"] = &#8220;+e[myKey]);<br />
}<br />
}</p>
<p>Surround your JavaScript code with try catch,<br />
run the code in your browser,<br />
then you will see every error in your codes.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eood.cn/debug-javascript-manually/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.101 seconds. -->
<!-- File not cached! Super Cache Couldn't write to: wp-content/cache/wp-cache-1820d97515bf06e065b533d30690b7da.html -->

