【楔子】
工欲善其事必先利其器
最讨厌笨手笨脚的敲代码了!
一定要练出运指如飞,简洁高效的指法。
--2012-12-04
【前言】
如果你对某个开源框架的使用已经比较熟练,对其内部的原理也基本清晰了。你或许会对其中的某些设计原理产生一些问题(或许仅对勤于思考的人有效)。这个时候,我认为你可以试图去看一看开源框架的源码。
我看开源框架的源码的方式有些特殊,我喜欢在程序里做debug,来看看在开源框架的内部,到底运行了哪些类,他们是如何执行的。我坚决反对逐个包逐个包的去看源码,这毫无意义。因为这相当于把一个肢体进行了分解,一个运行状态良好的程序,你把它割裂开来,显然什么都读不懂。在程序中debug源码,你不仅可以浏览到程序执行过程中的每个类,还能查看这些类的运行状态。这才是阅读源码之道。
---downpour (忘记李刚作者)
【调试总则】
1尽量不要使用System.out.println作为调试工具
2 把所有涉及到的组件日志级别激活并使用
3用Eclipse而不是Myeclipse
*Myeclipse调试太慢能急死人
2012-11-26
-------------------------------------------------------------------------------------------------------------------------------------
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl+F5
全局 调试上次启动 F11 (调试最后一次执行的程序)
全局 继续 F8
全局 使用过滤器单步执行 Shift+F5
全局 添加/去除断点 Ctrl+Shift+B
全局 显示 Ctrl+D
全局 运行上次启动 Ctrl+F11 (运行最后一次执行的程序)
全局 运行至行 Ctrl+R
全局 执行 Ctrl+U
-----------------------------------------------
移除全部断点
Run -> Remove All Breakpoints
条件断点设置:
在这个位置检查数据。还可以声明条件断点,它在表达式值发生变化时触发(请参见图 6)。
除此之外,在输入条件表达式时,也可以使用代码帮助
先双击设置断点位置,然后右键 Breakpoint Properties 断点属性
计算表达式的值:
为了在 Debug 透视图的编辑器中计算表达式的值,选择设置了断点的那行代码,在上下文菜单中,通过Ctrl+Shift+I 或右键单击您感兴趣的变量(参见图 7)选择 Inspect 选项。在当前堆栈框架的上下文中会计算表达式的值,在 Display 窗口的 Expressions 视图中会显示结果。
*****************************************************************
web debug
FireBug 调试
F12 打开FireBug窗口
脚本面板
单击 设置断点
F8 继续执行,当通过断点来停止执行脚本时,单击F8则会恢复执行脚本
F11 单步跳入 允许跳到页面中的其他函数内部
F10 单步跳过 直接跳过函数的调用即跳到return之后
单步跳出 允许恢复脚本的执行,直到下一个断点为止
条件断点
鼠标右键单击 输入条件表达式
只有条件满足时,才执行断点功能
2013-10-22 补充
A
使用FireBug找到页面中对应元素代码
①鼠标选中代码,右键查看元素。
②箭头
B
使用FireDebug调试JS代码
C
监视JS的运行性能
控制台中的“profile(概况)”选项,这将开启Firebug的性能监视功能,之后你可以进行页面的一系列操作,当 再次点profile按钮后,将停止对性能的监测活动,接着Firebug会显示一个列表,其中会清楚列明操作过程中所涉及的函数,调用次数,占用时间、 平均时间,最小时间,最大时间等
D
Firebug强大的网络数据监视功能
控制面板中的网络
E
在Firebug中可以设置带条件的断点
Web开发者应掌握的12个Firebug技巧
http://blog.jobbole.com/8406/
FireBug调试技巧小总结(想到新的添加)
http://mavforcezt1008.iteye.com/blog/1107312
*注Google Chrome debug也有一些独到之处值得关注。
F
conslole.log('-->'+info);
G
*********************************************************************************************************************************
-----------------------------------------------------------------
IE8 debug 调试
F12 打开调试窗口
脚本 Tab
单击 设置断点
单击 启动调试
点击Web页面,触发事件
F11 单步跳入 允许跳到页面中的其他函数内部(如js函数内部)
F10 单步跳过 逐过程
监视(Watch) 可手工输入变量名,查看其值
shift+F11 跳出
局部变量和监视的区别是:
在监视中可定义自己的变量
而在局部变量中只能固定的显示当前存在的变量,不能自主添加
对于undefine的几种情况
1 var 没有声明
2 声明了但该变量有定义重复的情况,这是要[变量名].length 查看一下
****************************************************************************************************************************
2012-11-26 补充
一 Debug模式图
二 功能键说明
1>. Step Into (F5) : 逐行偵錯,遇到可以 Drill Down 的處理函式,可進入繼續偵錯
进入:移动到下一个步骤,如果当前行有一个方法调用,该控件将会跳转到被调用方法的第一行执行。
2>. Step Over (F6):也是逐行偵錯,但遇到處理函式則不進入,直接將結果返回
跳出:移动到下一行。如果在当前行有方法调用,那么会直接移动到下一行执行。不会进入被调用方法体里面。
3>. Step Out (F7) :脫離函式,在使用逐行偵錯時,進入處理函式後如果想返回前一個 Call Stack 呼叫函式時使用
返回:从当前方法中跳出,继续往下执行。
4>. Resume (F8):繼續執行接下來的程式碼,遇到下個中斷點則才會停下來。
移动到下一个断点处执行。
5>. Run to Line (Ctrl + R or cmd + R):繼續執行接下來的程式碼,但在鍵盤游標所在的程式碼停下來。
举例:
如果一行有很多方法,
当第一次按F5键就跳入这一行第一个方法,F6一步一步调试,F7跳出这方法.
当第二次按F5键就跳入这一行第二个方法,F6一步一步调试,F7跳出这方法.
以此类推.想进入这一行第几个方法,就按几次F5和F7
三、断点类型及调试技巧
1 条件断点
断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
断点属性界面:
2 变量断点
断点不仅能打在语句上,变量也可以接受断点。
上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。
3 方法断点
方法断点就是将断点打在方法的入口处
方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。
4 异常断点
经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方就比较难了,还好可以打一个异常断点
上图中我们增加了一个NullPointException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。
5 修改变量值
代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?
我们可以在变量上右键,选择"Change Value..." 在弹出的对话框中修改变量的值。
或是在下面的值查看窗口中修改,保用Ctr+S 保存后,变量值就会变成修改后的新值了。
6 重新调试-Drop to Frame
这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。
回退时,请在需要回退的线程方法上点右键,选择 "Drop to Frame"
这也是我最喜欢的一个功能。调试期间,可以重新跳到调用堆栈框架的开始处执行,并且变量值也会回到最初。根据回档调整堆栈的深度,这个功能的主要用途是所有变量状态可以快速回到方法开始执行时候的样子,然后你可以重新进行一遍一遍执行,这样就可以在你关注的地方进行多次调试,但是在执行过程中也会产生一些副作用,比如插入到数据库里面的数据是无法删除的!
7 监视点
这是一个非常好的功能,当选定的属性访问或修改程序时,程序会停止执行并允许进行调试。在Outline视图中选择一个类变量并从上下文菜单中选择切换监视点,属性监视点将会被创建,在断点(Breakpoints)视图中会把所有监视点用列表的形式显示出来。
8 评估/检查
按Ctrl+Shift+D或者Ctrl+Shift+I来显示选定变量或者表达式的值。我们也可以给一个变量或表达式添加永久观察点,当程序在调试时,这些观察点就会在表达式视图(Expression view)中显示出来。
9 在Main函数中停止执行
在运行/调试设置中,编辑配置对话框中有“Main”这个选项卡,我们可以勾选“Stop in main”这个复选框。如果选中,那么在调试一个基于main方法的Java程序时,程序会在main方法第一行位置便停止执行。
10 环境变量
并不是在系统属性中添加环境变量,我们可以在编辑配置对话框中很方便地进行添加。
11分布过滤
当我们进入(F5)方法的时候,我们还可以访问其外部库(比如java.*),我们可能不需要这个库,就可以在Perference选项卡页面添加一个过滤器来排除这个包。
四 远程调试
略。
***********************************************************************************************************************************
* 2012-12-04 Ecplise 实用快捷键
***********************************************************************************************************************************
1 查找
Open Resource
Ctrl+Shift+R
2 Search
Ctrl+H
这个键很实用,用起来也很灵活
Java中的
WorkSpace是在Eclipse当前工作区(包括所有工程)中查找
Enclosing project 当前工程中查找
Jsp中的
这样就可以在一个陌生的Project中顺藤摸瓜,找到你想要的。
3 Ctrl+O 快速outline
快速查找当前类某个方法。
4 Ctrl+e 快速转换编辑器
切换各个已经打开的窗口
Alt + -> 或 Alt+<- 前后窗口的切换
5 Ctrl+m 窗口最大或者缩小
6 Ctrl+. 及 Ctrl+1:下一个错误及快速修改
ctrl+.将光标移动至当前文件中的下一个报错处或警告处。这组快捷键我一般与ctrl+1一并使用,即修改建议的快捷键。
新版Eclipse的修改建 议做的很不错,可以帮你解决很多问题,如方法中的缺失参数,throw/catch exception,未执行的方法等等。
7 Ctrl+T
查看一个类的继承关系树,是自顶向下的
7.1
Ctrl + Shift + T : 打开Open Type 查找类文件
8 Ctrl+Shift+O 导入包
9 Alt+/ 内容辅助,提示代码补全etc.
10 Ctrl+Shift+F 代码格式化
11 Ctrl+L 定位到指定行
12 Ctrl+Q 跳到最后一次编辑处
13
- Alt + Shift + R : 重命名
- Alt + Shift + L : 抽取本地变量
- Alt + Shift + M : 抽取方法
14 Ctrl + Shift +G 查找声明的方法在那些类中引用了。
15
Ctrl + Alt + ↓(↑) : 向下(上)复制本行
Alt + ↓(↑) : 向下(上)移动本行想复制一行到附近的别处可以先Ctrl + Alt + ↓(↑) ,然后再Alt + ↓(↑) : 向下(上)移动本行
16
Ctrl+w 关闭当前窗口
=========================================================================
补充
2013-3-1
Debug透视图 细节 技巧
1 变量视图
1.为变量名视图,显示当前代码行中所有可以访问的实例变量和局部变量
2.显示所有的变量值
3.可以通过该窗口来改变变量值
2 逻辑结构
逻辑结构用来展示map或者其它collection类存储的值。它直接展示出“逻辑”部分,而不必详细显示其它的内部变量。通过点击图中所示按钮来使用。
图1为不启用逻辑结构,图2为启用。
3 单步过滤
它使我们可以跳过部分代码,直接跳到我们需要debug的代码。在Window > PreferencesJava > Debug > Step Filtering 设置过滤器, 可以选择需要过滤掉的包和类。同时要确保你在debug视图中启用了单步过滤,如下图。这样在使用单步调试的时候,就会使用到这个过滤功能。
4 Expression 表达式
5 Expression 增强版 --》Display窗口
在上面的添加表达式窗口,虽然可以添加表达式,但是添加表达式他没有智能提示功能。你可以点击 Windows->Show View –>Display 菜单打开Display视图。再次视图中当你输入表达式,会有智能提示功能。
*参阅:
http://mgoann.iteye.com/blog/1396637
http://blog.csdn.net/shangpusp/article/details/5388950
Eclipse Debug不为人知的秘密