RIACHINA 中国RIA开发者论坛RIA 客户端开发FLEX 专区 新人教程-遇到问题,请先调试。

新人教程-遇到问题,请先调试。

新人教程-遇到问题,请先调试。

好久没写教程,实在是忙,现在想写点什么,虽然很早以前说过写些关于lcds其他方面应用的。
但是我想,有能力研究那了,基本上也不用我再来多此一举了。
现在新人很多,所以决定写些基础的东西来帮助新人。

以下内容主要是对新人说的。高手无视。
Flex论坛一直加入着很多新鲜的血液,作为版主很高兴看到大家来到这里学习和分享经验。
来这里的很多人是编程高手,学习Flex自然很容易上手,以前的经验也能很快的转换到Flex中。
也有很多没怎么接触过编程,被Flex美好的界面所吸引新人,决定加入大家。
不管什么样我们都很欢迎。
在这里来大家多是提问题,“旧人”帮新人理是正常。
不过新人由于基础薄弱,不单单是指Flex,而且也涉及一些软件开发的基础。往往很简单的问题,或者很容易排除的问题,弄半天。
再来这里问,有些问题也不会得到很好的解决,甚至是没人回答。不是因为这里没人。
因为很多问题需要通过症状或者详细的调试才可以知道,而仅仅一个提问是无法帮助解决问题的。

归根到底,新人缺少一些对付错误的“诀窍”和“灵感”,那就是调试。
我不希望大家一谈到调试,就认为是alert或者trace,我一问,你调试去看看,对方就回答alert是空(说实话,我很烦,这对排除错误基本没帮助)。
trace和alert那只是其中很局限的一种手段,当然某些情况也是有特殊价值的。
授人以鱼不如授人以渔,还是帮助各位新人了解一下代码调试,养成一个良好的调试习惯、思路对今后开发帮助无穷。

真正的调试是设置断点,有计划的,一步一步的监视你的程序逻辑,数据变化和结构的。
往往很多表面上看不清楚,想不明白的问题,通过调试我们就能发现,哦,原来如此简单,哦,原来是这里的问题。
出现问题,不要想当然的认为应该是怎么解决,然后就动手去改,改来改去不得要点(这话高手忽略)
特别是遇到一些,服务器返回的数据为什么获取不到?为什么报“无法访问空对象的属性和方法”这样的问题。
说实话,除了你自己调试,我们无法帮你,除非帮你做出来。这样还是你在开发吗?
也许大家心情好,或者问题一票就知道了,就告诉你是某某地方出了问题,但是下次遇到同样的错,你仍然不知道怎么解决,或者你可能避免了范同样的错,但是你仍然不知道为什么要这么做。
长期这样,其实对于提高自己的开发能力没有好处。

新人可能从来没摸过,怎么调试?
值得庆幸,FlexBuilder提供了比较好的调试能力(.net过渡的不要和vs比),通常安装FB的时候,会自动给你的机器上安装上【调试版】的flashplayer。
我们要调试,类似运行程序那样,选中需要调试的文件,在右键菜单中找到debug as->Flex Application即可浏览调试状态下的应用。

 附件: 您所在的用户组无法下载或查看附件

有些同学会遇到“not debugger”不是调试器的错误

 附件: 您所在的用户组无法下载或查看附件

这是因为,由于某种原因(重装系统、多个浏览器、flashplayer升级时注册表信息错误等等),你调试的浏览器中,没有安装调试版的flash player,到http:www.adobe.com/go/flashplayer_debugger去下载。
其实在FB安装目录下/player/win这个目录里有调试版的fp,运行下就可以了。
需要注意的是,FF和IE的调试器是不同的,针对自己的浏览器来安装。
如果还出现这个错,说明你人品不好;)
开玩笑,还出现这个错,多数是由于fp升级时注册表错误导致。
你就去找个flash player卸载工具,卸掉你的播放器组件。重新安装。

OK,你已经学会了debug第一步,就是以debug模式来运行程序。
这样看起来和直接运行没什么区别啊。是的,除了能在控制台下显示trace的字符外,
想要一步一步的来观测程序的逻辑是如何走动、变量或属性是什么样子的,就必须要设置断点。

什么是断点,是的,我当各位同学是菜到不行的菜鸟。
断点是在调试过程中,让你程序流程暂停的那个点,
断点设置很简单,在你想停下来的那一行代码的行号前双击即可设置或取消断点了

 附件: 您所在的用户组无法下载或查看附件

而在哪里设置断点,则是一个经验的过程,只有方法体内可以设置断点,因此设置断点全凭你对程序逻辑的理解和判断。
比如你现在想知道远程调用返回的数据格式是怎么样的。那么你就需要在回调方法中设置断点,而不是仅仅只在请求时设置,
因为flex中,远程请求是异步的。回调的方法并不是在请求方法执行完成后就立马调用的。

进入断点调试时就会切换到Flex Debugging视图,这个视图中,可以监测变量,控制断点等等
进入断点后,程序就会挂起,逻辑就在断点处暂停,
直到你通过“Step into(跳进,如果断点行执行了一个方法则会跳进这个方法的逻辑),
step over(跳过,逻辑进入到下一行),
step return(直接跳到方法返回之前的那一步)”等命令来控制流程和逻辑的走动。

 附件: 您所在的用户组无法下载或查看附件

我们若是查看一个变量的结构或者值,就可以通过在代码中选中这个变量,右键选择watch ..

 附件: 您所在的用户组无法下载或查看附件

在expression面板中看到所监视数据的结构,而且可以根据当前走到不同逻辑实时的看到数据的变化。
对于复杂的数据结构来说,这无疑比trace或者alert出的东西好的多。

 附件: 您所在的用户组无法下载或查看附件

ok, debug的入门就介绍到这里,其实debug不仅仅可以用来排错。
对于研究复杂的算法逻辑,整理思路,理解别人的程序流程都是非常好的工具。

希望在遇到问题时,你能深刻的剖析你的程序。
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:新人教程-遇到问题,请先调试。

讲得非常细 也很中肯  谢谢BZ了。
 

回复:新人教程-遇到问题,请先调试。

stup into
stup over
stup return
还是不是很清楚。
 

回复:新人教程-遇到问题,请先调试。

什么是直接跳到防范会之前的那一步?
 

回复:新人教程-遇到问题,请先调试。

。。。刚才都是错别字  sorry
什么是
直接跳到方法返回之前的那一步
 

回复:新人教程-遇到问题,请先调试。

即直接跳到一个方法的最后一行,再走下去这个方法就执行完毕,通常用于你不关心这个方法本身的流程,你只想知道这个方法结束之前的结果
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:新人教程-遇到问题,请先调试。

3Q 知道了 谢谢。
 

回复:新人教程-遇到问题,请先调试。

支持CI大哥...
晚上吃醋,谁家借点螃蟹...
 

回复:新人教程-遇到问题,请先调试。

偶像~~:D
Gone with the Flex~~
 

回复:新人教程-遇到问题,请先调试。

谢谢楼主!:Z
 

回复:新人教程-遇到问题,请先调试。

问一下,对于需要外部数据支持的程序,例如在JSP里,然后SWF需要通过HttpService取数据的情况,该怎么调试呢?
Gone with the Flex~~
 

回复:新人教程-遇到问题,请先调试。

文中说到了一些,“比如你现在想知道远程调用返回的数据格式是怎么样的。那么你就需要在回调方法中设置断点,而不是仅仅只在请求时设置,
因为flex中,远程请求是异步的。回调的方法并不是在请求方法执行完成后就立马调用的。

在返回结果的回调方法里设置断点。
如果你希望后端的java服务程序也可以设断点,你的开发工具必须是eclipse加上fb的插件版才行。因为eclipse本来就是java的开发平台,本来就可以调试java的。
而其他后台语言的调试要视具体情况了
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:新人教程-遇到问题,请先调试。

[RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: 流错误。 URL: http://api.flickr.com/services/feeds/photos_public.gne?tags=23&fomat=rss%5F200%5Fenc"]. URL: http://api.flickr.com/services/feeds/photos_public.gne"]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:216]
    at mx.rpc::Responder/fault()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\Responder.as:49]
    at mx.rpc::AsyncRequest/fault()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:103]
    at DirectHTTPMessageResponder/errorHandler()[E:\dev\3.0.x\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:343]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/redirectEvent()


请教下这个是什么错误哦,
 

回复:新人教程-遇到问题,请先调试。

谢谢ci指点,:D
 

回复: 新人教程-遇到问题,请先调试。



引用:
原帖由 siwei_luo 于 2008-5-20 21:16:00 发表
[RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPha

查看这个地址返回的是什么内容,如果地址的内容不是utf-8格式的会爆出io错误
Protoss拥有高度的文明、先进的科技和强大的精神力量。但是由于长达千年的寿命,种群数量稀少,消耗不过繁殖能力出众的Zerg,险些被Zerg给灭族。
 

回复:新人教程-遇到问题,请先调试。

问题解决了,谢谢!
 

回复:新人教程-遇到问题,请先调试。

又读到篇cimmicola兄的好文~~

受益匪浅~~  感谢~
 

回复:新人教程-遇到问题,请先调试。

cimmicola大大的文章还是那样受用啊!~:D
www.zhaii.com
 

回复 18F realsmy 的帖子

:strong: 好~我会比心机学噶啦,谢楼主
 

回复:新人教程-遇到问题,请先调试。

多谢前辈的帖子
 
1  /  2  页   12 跳转

版权所有 riachina.com   Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2008 Comsenz Inc.
Processed in 0 second(s) (Cached).
返顶部