debug
1. 设置断点
在源代码文件中,在想要设置断点的代码行的前面的标记行处,双击鼠标左键就可以设置断点,在相同位置再次双击即可取消断点。有的时候我们还有这样的需要,就是并不想一行一行的执行代码,比如一个for循环会循环1000多遍,只想在第500遍的时候让线程挂起进行调试,这个时候可以使用条件断点。 设置条件断点:可以给该断点设置触发条件,一旦满足某条件时才开始调试,可以在断点处点击鼠标右键,选择Breakpoint Properties进入断点设置页面。
2. 断点类型及断点窗口
在调试中可以设置的断点类型有五种:
1、行断点: Spring在注册Bean定义(registerBeanDefinition)时,如果是org.springframework.demo.MyBean,就挂起线程,可以开始单步调试了。
对于命中次数(hit count)的使用,一般是在循环中,第N个对象的处理有问题,设置hit count = N, 重调试时,可以方便到达需要调试的循环次数时,停下来调试。
2、方法断点: 方法断点的好处是可以从方法方法进入或者退出时停下来调试,类似行断点,而且只有行断点和方法断点有条件和访问次数的设置功能。
但是方法断点还有另外一个好处,如果代码编译时,指定不携带调试信息,行断点是不起作用的,只能打方法断点。
有兴趣的可以通过A1将Add line number… 前的勾去掉, 调试下看看。
3、观察断点: 在成员变量上打的断点。只有对象成员变量有效果,静态成员变量不起作用。
可以设置变量被访问或者设置的时候挂起线程/VM。
4、异常断点:
系统发生异常时,在被捕获异常的抛出位置处或者程序未捕获的异常抛出处挂起线程/VM, 也可以指定是否包括异常的子类也被检测。
5、类加载断点: 在类名上打的断点。接口上是打不了类加载断点的,但是抽象类是可以的,只是在调试的时候,断点不会明显进入classloader中,单步进入知会进入到子类的构造方法中,非抽象类在挂起线程后单步进入就会到classloader中(如果没有filter过滤掉的话)。类加载断点不管是打在抽象或者非抽象类上,都会在类第一次加载或者第一个子类第一次被加载时,挂起线程/VM。
每种断点的设置有些许不一样,可以在断点上右键->Breakpoint properties进行设置,但一般在断点窗口有快速设置的界面,Breakpoint properties中多了filter, 其实比较鸡肋,用处不大。
断点相关的快捷键:
快捷键 | 说明 |
---|---|
ctrl+shift+b | 在光标处大断点/取消断点 |
ctrl+alt+b | 忽略所有断点 |
Alt+shift+q, b | 激活断点窗口 |
1、调试执行
功能 | 快捷键 | 描述 |
---|---|---|
Step Info | F5 | 单步进入(如果有方法调用,将进入调用方法中进行调试); |
Step Over | F6 | 单步跳过(不进入行的任何方法调用中,直接执行完当前代码行,并跳到下一行); |
Step Return | F7 | 单步返回(执行完当前方法,并从调用栈中弹出当前方法,返回当前方法被调用处); |
Resume | F8 | 恢复正常执行(直到遇到下一个断点); |
Run to Line | Ctrl+R | 执行到当前行(将忽略中间所有断点,执行到当前光标所在行); |
Drop To Frame | 无 | 回退到指定方法开始处执行,这个功能相当赞。在方法调用栈上的某个方法右键,选择Drop To Frame就可以从该方法的开始处执行比如重新执行本方法,可以在本方法上用Drop To Frame,将从本方法的第一行重新执行。当然对于有副作用的方法,比如数据库操作,更改传入参数的对象内容等操作可能重新执行就再是你想要的内容了。 |
Copy Stack | 无 | 拷贝当前线程栈信息 |
2、数据查看
功能 | 快捷键 | 描述 |
---|---|---|
Inspect | ctrl+shift+i | 察看选择的变量、表达式的值或执行结果, 再次按ctrl+shift+i可以将当前表达式或值添加到Expressions窗口中查看; |
display | ctrl+shift+d | 显示选择的变量、表达式的值或执行结果, 再次按ctrl+shift+d可以将当前表达式或值添加到Display窗口中显示; |
Execute | ctrl+u | 执行选择表达式; |
Run to Line | ctrl+r | 执行到当前行(将忽略中间所有断点,执行到当前光标所在行); |
All instances | ctrl+shift+n | 查看选择的类的所有对象,这个功能超赞; |
Instance Count | 无 | 查看选择的类的所有对象个数; |
Watch | 无 | 添加当前变量、表达式到Expressions窗口中; |
相关阅读
Layer type: Reduction 头文件位置:./include/caffe/layers/reduction_layer.hpp CPU 执行源文件位置: ./src/caffe/layers/redu
包装类:在Java中,每个基本类型在java.lang包中,都有相应的包装类,把基本数据转换为对象,其中包装类Integer是Number的直接子类。 基
1、启动server .cd %WAS_HOME%/profiles/AppSrv01/bin ./startServer.sh server1 2、停止server ./stopServer.sh server1 -usern
老付最新很忙,这次先说下作为运营人你必须知道的5件事,下篇关于团队管理的内容老付正在酝酿。本文会附上老付自创正在使用的团队考
分享一下7年来工作时用到的工具,链接比较多,没有一一检查是否能正常下载,若链接有问题,可以在下方留言。 如果对软件测试、接口、自动