常用的调试方法

挂起和恢复线程

调试开始后,开发人员可以将正在执行的线程挂起,以便查看该线程堆栈帧的信息,步骤如下。

(1)在调试视图选择线程。

(2)在调试视图的工具栏点击“挂起”按钮,线程将被挂起,调试视图显示当前线程的调用堆栈(如下图所示),并且调试视图中的编辑器也会突出显示该堆栈帧对应的代码,这行代码就是线程被挂起那一刻程序运行到的地方。

线程挂起时会自动选择线程顶部的堆栈帧(即最近被调用的方法),变量视图将会显示堆栈帧中的变量以及它的值,复杂的变量可以被展开以便查看其成员的值。开发者也可以在调试视图的调用堆栈帧里选择一个方法调用,该方法的变量信息将会在变量视图展示出来。

线程挂起时,将鼠标移到Java编辑器里的某个变量之上,就会显示该变量的值。

线程既可以被挂起,也可以恢复执行。

(1)在调试视图选择线程或它的堆栈帧。

(2)在调试视图的工具栏里点击“继续”按钮(或者按F8),线程恢复执行。

单步执行程序

线程被挂起后,可以使用“单步执行”逐行执行程序。如果在这个过程中遇到断点,那么将在断点处挂起并且终止单步执行。

单步执行程序时有一下几种操作。

(1)“单步跳过”。F6。

(2)“单步进入”。F5。

(3)“单步跳入选择的内容”。在Java编辑器里将光标覆盖希望进入的方法的名字,按Ctrl+F5,程序运行直至已选择的方法被调用。

(4)“单步执行过滤器”。避免在调试过程中出现中断的情况。这中中断是由于在没有源代码的情况下使用单步执行进入调用方法代码而导致的。中断发生时,会弹出一个窗口,要求输入源代码的位置。在使用只包含类文件的代码库时会发生这种情况。调试器不会单步进入过滤器中设置的任何包和类。

要设置单步执行过滤器,点击菜单Window->Preferences->Java->Debug->Step Filtering,如下图所示。在右边的窗口窗口中可以添加类、包以及过滤器,还可以启用或是禁用过滤器。

(5)如果已经进入了方法调用,并且看到了期望的结果,并且希望尽快从该方法返回,可以使用“单步返回”(F7)。

(6)一个线程被挂起后,可以让它恢复执行一直到某一行,这样可以让程序运行到某一行而不需要设置断点。选择需要运行到的那一行,然后使用快捷键Ctrl+R。

表达式的计算和显示

当JVM挂起一个线程(由于遇到断点或单步执行),就可以在堆栈帧的上下文中计算表达式。缺省情况下,表达式视图位于调试视图的右上角,它与断点视图、变量视图等视图共享一个窗格。表达式视图的使用如下。

(1)选择要在其中求值的堆栈帧。对于变量和表达式视图而言,value由变量的上下文决定。

(2)点击空白区域,显示结果。

查看和修改变量的值

对于简单的变量,只需要在Java编辑器中将鼠标移到变量名上即可。

如果要查看复杂变量的值,可以使用变量视图。变量视图显示当前范围内(即堆栈帧的上下文)的所有变量。

使用变量视图还可以修改变量的值,可以直接单击value值进行修改,也可以在变量所在的那一行上右击,并在弹出的菜单中选择“Change Value ...”。

断点

可以为程序的可执行代码(即没有注释掉的代码)添加行断点,在有断点的那一行代码执行之前,线程就会被挂起,调试器会自动选择被挂起的线程,并且将线程堆栈里的信息在调试视图里显示出来。而在调试视图的编辑中,设置断点的那一行会被突出显示。

1.方法断点

在Java程序里,它适用于类文件(即.class文件)。添加方法断点的步骤如下。

(1)在大纲视图打开一个类,选择一个想要加入方法断点的方法。

(2)右击并在弹出的菜单里选择“Toggle Method Breakpoint”。

(3)添加断点之后,如果这个类的源文件存在,会在文件编辑器的标记栏里显示被选择的方法的断点。

(4)当进入该方法的那一刻,在调用该方法的任何代码执行之前,线程就被挂起。

2.条件断点

可以为断点设定条件,以便断点在遇到以下情况才会使线程挂起。

(1)当条件成立的情况下。

(2)当条件发生变化的情况下。

为一个断点设定条件的步骤如下:

(1)找到需要设定条件的断点。

(2)右击该断点,在弹出的菜单中选择“Breakpoint Properties...”,弹出如下图所示的窗口。

(3)在属性菜单选择“Conditional”后,在文本区域输入条件表达式。

(4)如果希望每次条件为真时,断点都会使线程挂起,那么就要选择“Suspend when ‘true‘”;如果希望在根据条件判断的结果改变时才使线程挂起,就要选择另一项。

(5)点击“OK”完成条件断点的设置。

由上图可以看到,还有一个“Hit count”的选项。该选项适用于行断点、异常断点、检查点以及方法断点。断点启用“Hit count”后,“Hit count”就开始工作。线程运行经过该断点n次(即设定的次数)后,线程就会被挂起。但是这个“Hit count”只能作用一次,除非它被再次启用或更改命中次数。

异常断点

通过异常断点,可以在抛出异常时挂起线程;可以在捕获异常的地方挂起线程;可以在未捕获异常的地方挂起;还可以在捕获和未捕获异常的地方都挂起执行。设置Java异常断点的步骤如下:

(1)在断点视图或者是工作台“Run”菜单里,选择“Add Java Exception Breakpoint”。在出现的窗口中会列出所有可用的异常,如下图所示。

(2)输入或从列表中选择一个希望捕获的异常。在该窗口的底部,选择希望在什么地方挂起线程。

时间: 2024-10-14 06:15:50

常用的调试方法的相关文章

VS2010常用的调试方法

1.一直以来都没用过command window, F5以后可以这样用,直接对一个函数,或者变量做模块测试 以下还有一些常用的技巧: 1 悬停鼠标查看表达式值 调试是很有挑战性的.比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等……但是无论哪种情况下,查看表达式和局部变量 的值都是很麻烦的(把表达式和局部变量放到watch窗口里).一种更简单的方法,把鼠标停在所需查看的数据上.如果是类或结构,那么点击展开可以很方便 快速地查看其字段. 2 在运行过程中改变变量值 调试器

Matlab的常用调试方法

M程序调试器的热键设置和VC的设置有些类似,如果用户有其他语言的编程调试经验,则调试M程序显得相当简单.因为它没有指针的概念,这样就避免了一大类难以查找的错误. 不过,M程序可能会经常出现索引错误,如果设置了 stop if error( Breakpoint 菜单下),则程序的执行会停在出错的位置,并在MATLAB命令行窗口显示出错信息.下面列出了一些常用的调试方法. (1)设置或清除断点:使用快捷键F12: (2)执行:使用快捷键F5; (3)单步执行:使用快捷键F10: (4)step i

VC的常用调试方法

前言 VS是非常强大的IDE,所以掌握VSVC的常用方法,将会使得我们找出问题解决问题事半功倍. 目录 VSVC的常用调试方法 前言 1. Watch窗口查看伪变量 2. 查看指针指向的一序列值 3. 内存泄露查找 4. 调试Release版本 5. 远程调试 6. 函数断点 7. 数据断点. 8. 代码执行时间 9. 格式化数据 10. 格式化内存 Watch窗口查看伪变量 按MSDN的介绍,伪变量就是用来查看特定信息的术语.例如当调用的API失败时,可以用GetLastError获取对应的错

linux 下C/C++程序常用调试方法(gdb)

 不管是在开发或者运行过程中,调试保证程序正常运行最基本的手段,熟悉这些调试方式,方便我们更快的定位程序问题所在,提高开发效率. 一 程序正常运行调试 (1)  直接使用gdb 开发过程中最常用的方式,我们可以在其过程中给程序添加断点,监视等辅助手段,监控其行为是否与我们设计相符,比如: (2)      程序已经运行,通过attach附加到进程 二 程序中断后调试 首先简单介绍下linux 下的信号: 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.进程之间可以互相通过

JavaScript封闭函数、常用内置对象、js调试方法

1.封闭函数 封闭函数是JavaScript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数 /在封闭函数前加';',可以避免js压缩时出错/;(function(){ alert('hello world!'); })(); /*当i大于78时等于78,小于时等于89*/ var i = 90>78?78:89; alert(i); /*第二个写法*/ !function(){ alert('hello world!'); }(); /*第三个写法*/ ~function(){

(转载)VS2005常用调试方法集

1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Release状态.C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database.在Link标签中选中Generate debug info复选框. 注:只是一个介乎Debug和Release的中间状态,所有的ASSERT.VERIFY都不起作用,函数调用方式已经是真正的调用,

结合Scikit-learn介绍几种常用的特征选择方法

作者:Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减少特征数量.降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 拿到数据集,一个特征选择方法,往往很难同时完成这两个目的.通常情况下,我们经常不管三七二十一,选择一种自己最熟悉或者最方便的特征选择方法(往往目的是降维,而忽略了对特征和数据理解的目的).

JAVA card 应用开发 JCOP的调试方法

本文讲述如何在仿真环境下,调试JAVA card 的APPLET. 通过JCOP在Eclipse进行仿真调试,启动JCOP调试器,我们可以看到如下图: 要仿真调试,就是在命令输入框里面输入JCOP相关的指令,通过阅读JCOP的帮助文档,我们看到JCOP提供的命令不算繁多,大约40个. 下面我挑选常用的几个来说明: 1.      复位卡片:"/atr",如果不加任何参数,表示立即复位. 2.      发送指令:"/send",这是最直观的调试指令.可以逐个指令发送

干货:结合Scikit-learn介绍几种常用的特征选择方法

原文  http://dataunion.org/14072.html 主题 特征选择 scikit-learn 作者: Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减少特征数量.降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 拿到数据集,一个特征选择方法,往往很难同时完成这两个目的.通常情况下,我