博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
idea中Debugger的使用——工欲善其事,必先利其器
阅读量:3959 次
发布时间:2019-05-24

本文共 1681 字,大约阅读时间需要 5 分钟。

文章目录

此篇文章的主要目的是给我的另外一篇文章

做个铺垫,里面的有关内容都是按照上面的文章讲解
在这里插入图片描述

2.1 调试图解

以如下示例代码MyController为例,展示对控制器方法添加断点后的调试页面。在debug方法的第一行添加断点。使用调试模式 启动应用,启动成功后, 通过浏览器访问http://localhost:8080/some.do此时进入断点,如下图所示。

在这里插入图片描述

下再面根据其中内容列出调试时常用的窗口及其提供的信息,以及其中的常用功能。

1.断点。在一行代码的左侧位置单击即可为该行代码设置断点。程序执行到此处时会中断,进而进入调试模式。

2.栈帧窗口。用于展示当前断 点的调用栈。通过该窗口,可以看到从请求处理入口调用到当前处理方法的全部调用栈,其上层调用栈的代码都是框果层的代码,该窗口是用于探索框架执行路径的常用工具。单击栈帧窗口中的任一帧, 可以看到该帧所在的方法。

3.控制台。用于展示控制台的输出或输入,Sytem.out 相关的输出都会展示到控制台中。

4.线程窗口。可以看到当前Wb应用中的所有线程。用于请求处理的是Web容器创建的线程。一般用于 多线程调 试。

5.重启应用。

6.恢复执行。从调试模式恢复执行,直到遇到下一个断点。

7.终止程序。

8.列出所有断点。

9.单步执行,跳过方法。调试模式下执行当前行代码,如果当前行是方法,不进入方法直接完成方法的执行。该功能调试模式下常用。

10.单步执行。调试模式下执行当前行代码,如果当前行是方法,则进入方法内部单步执行。与该图标相邻的红色按钮表示强制进入方法内部,如JDK内置的方法,蓝色按钮直接跳过方法执行,红色按钮则会进入JDK内置的方法中执行。

11.跳出方法。调试模式下,执行该方法后续逻辑后从当前执行方法返回至上一级调用

栈。即在栈帧窗口看到的当前帧的上一帧。

12.执行至当前编辑窗口光标所在行后中断。

13.执行表达式。可以打开窗口,输入表达式并执行得到结果。

14.变量窗口。展示当前断点栈中的所有变量,包括方法参数、当前实例等。如果单击栈帧窗口中的不同栈帧,则可以看到所选栈帧的所有变量。

2.2 调试使用

本节,本应该对2.1的内容进行详细展开,但是由于篇幅有限,我们只讲一下栈帧窗口和入口断点

  1. 栈帧窗口

通过栈帧窗口可以看到当前处理器方法的调用栈,栈顶是Web容器接收请求后的根处理方法。

经过Spring MVC框架的组件一层层地 查找调用,最终调用到了当前的处理器方法。

而这整个过程是可以通过栈帧窗口完整地查看的。

单击栈帧窗口中的各个栈,可以看到当前选中栈执行所在类文件,通过这种方式可以看到在框架层中源码及其执行所在行。如下图所示。

在这里插入图片描述

技巧:如果在编辑页窗口的顶部出现了 .class file的提示文字,则表示当前展示的源码是通过对类文件进行反编译获得的,但反编译出来的代码有时候并不准确,可读性也比较差。Spring框架整体都是开源的,故可以直接单击旁边的Download Soures来下载Spring的源码,下载完成后即可看到完整的源代码。

栈帧中部分帧的源码是看不到的,有些是JDK自带的私有包(sun.reflect包),源码并不直接在JDK中公开。这种源码我们也无须关注,只需要关注org.springframework包下的栈帧对应的类即可。

  1. 入口断点

通过在处理器方法上打断点,可以在执行处理器时中断。在处理器断点向上返回的过程中,通过调试的方式可以知道整个框架对于返回值的处理过程。但如果要想探究进入处理器前方法参数等的处理过程,这里的断点就不能满足我们的需求。但可以根据调用栈找到根入口,只需要在框架的根入口处打上断点,重新请求一次即可以在根入口处中断。

在这里插入图片描述

在这里,我们先给一个结论:

对于上述栈帧,找到Spring MVC框架的根入口即FrameworkServlet.doGet方法,其中执行FrameworkServlet.processRequest方法,这里就是框架的入口,在此处打断点,可以发现任何请求都会进入此断点。

转载地址:http://vrozi.baihongyu.com/

你可能感兴趣的文章
centos 7 yum源文件配置详解及163 yum源更换
查看>>
PHP统计当前网站的访问人数,访问信息,被多少次访问。
查看>>
Windows10远程报错CredSSP加密oracle修正
查看>>
Windows server 2016 设置多用户登陆
查看>>
偶然发现的面包屑
查看>>
每天自动升级你的Centos
查看>>
WDCP v3版本的小工具集
查看>>
CentOS 7 下挂载NTFS文件系统磁盘并设置开机自动挂载
查看>>
Mysql修改最大连接数&重启
查看>>
华为交换机划分vlan
查看>>
CentOS 6.6 搭建Zabbix 3.4.8 过程
查看>>
make: *** No targets specified and no makefile found. Stop.解决方法
查看>>
安装zabbix 3.4版本编译报错configure: error: Unable to use libevent (libevent check failed) 解决办法
查看>>
一行代码更改密码
查看>>
非插件实现cookie版Typecho文章阅读次数统计功能
查看>>
非插件实现Typecho语法高亮
查看>>
windows 下 netsh 实现 端口映射(端口转发)
查看>>
两个好用的命令行工具 watch 和 rsync
查看>>
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>