Java 启动和停止界面_一文详解各种花里胡哨的Java调试技巧,多图预警,记得收藏...

0da3a462a3e4751e86cfa88ea9428134.png

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享!

Java架构筑基​zhuanlan.zhihu.com
87d1326a5abb579fabf479b610990a15.png
  1. Java架构筑基——专注于Java技术的研究与分享!
  2. 后续文章将首发此专栏!
  3. 欢迎各位Java工程师朋友投稿和关注
  4. Java架构师进阶之路<常用资料分享>

一. Java调试

1.1 Eclipse调试

1.1.1 Debug

1.1.1.1 条件断点

断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。

条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。

在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"

c117e15a5ba0aebfc04d857751526ce5.png

断点的属性界面及各个选项的意思如下图,

7ecc011985d14bb7cc5f2fb6c4fcaf28.png

1.1.1.2 变量断点

断点不仅能打在语句上,变量也可以接受断点,

9271ba44ef4011c80d02f9a068fc3d0a.png

上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。

1.1.1.3 异常断点

经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方就比较难了,还好可以打一个异常断点,

45ed7d1dc7d953d2d629b1f6c6ecac03.png

上图中我们增加了一个NullPointException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。

1.1.1.4 方法断点

方法断点就是将断点打在方法的入口处,

0927913d7255fde6cdb984bb529af01f.png

方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

1.1.1.5 改变变量值

代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?

在Debug 视图的 Variables 小窗口中,我们可以看到 mDestJarName 变量的值为 " F:StudyeclipseproJarDirjarHelp,jar "

ec82725aacf49880e36df54daf8c2d90.png

我们可以在变量上右键,选择"Change Value…" 在弹出的对话框中修改变量的值,

62f039f475e6026a1f16a5be2e2a059d.png

或是在下面的值查看窗口中修改,保用Ctr+S 保存后,变量值就会变成修改后的新值了。

fcb3c6bf01e8c448dc9563bd6fe9a21e.png

1.1.1.6 重新调试

这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。
回退时,请在需要回退的线程方法上点右键,选择 "Drop to Frame"

1.1.2 远程调试

1.1.2.1 环境

tomcat,Eclipse,做远程调试不需要任何插件。

项目:新建一个web项目

index,jsp源码如下

<%com,syj,test,DebugTest,test("远程调试测试");
%>
Hello Remote Debug

创建一个DebugTest类代码如下:

public class  DebugTest{public static void test(String content){System,out,print(content);}
}

1.1.2.2 tomcat配置

  • 将web应用部署到Tomcat的webapp目录下
  • 修改Tomcat/bin/startup,bat文件,在最前面加上如下代码:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava,compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

注意上面命令必须写成一行中间不能有换行,-前是空格-后是非空格,由于word原因,该文章在显示的时候可能会有换行的情况。

  • 必须先启动Tomcat启动tomcat/bin/startup,bat参下图

46581963477089806fde31585748ba44.png

1.1.2.3 Eclipse配置

  • 在com,syj,test,DebugTest,test方法中设置断点
  • 在eclipse中配置debug,配置完成后点击debug按钮。如图:

74f1890c220e595b9624bb12fc26cb61.png

053943c20abc0eca8ff40ecb850d06cd.png
  • 打开浏览器访问部署的web应用,访问index,jsp
  • 当浏览器访问index,jsp时,由于调用了com,syj,test,DebugTest,test,又因在test方法中设置了断点,所以程序会被断点拦截,如图:

1276128689b9bd69cf68cddfa4fe8cf5.png
  • 不需要调试的时候点击断开,需要调试的时候再点击debug,非常方便,当调试过程中出现引用非本project的源码时(例如跟踪到tomcat里面或spring,hibernate里面),会提示找不到源码,点击相应提示的按钮(到时候editor区只有一个按钮,所以大家就不要问哪个按钮了)可以添加源码继续调试,或在配置debug前就把需要的源码都添加上,在source选项卡里面。

二. 浏览器调试

主要讲解Google浏览器

2.1 谷歌浏览器调试

Google Chrome除了简洁、快速,现在的Chrome的插件也非常的丰富了。而对于web开发者来说,Chrome对于JSt调试很好用,HTML5、CSS3等一些新标准的支持也是比较完善的,而且Chrome的开发者工具我个人认为真的非常好用。

2.1.1 启用调试

怎样打开Chrome的开发者工具?你可以直接在页面上点击右键,然后选择审查元素:

3ef561d0544f205436bf8995b17202c2.png

或者在Chrome的工具中找到:

7a61128c0d815bb3d903cefc91560399.png

或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shift+J直接打开控制台),或者直接按F12。界面如下图:

d5c952cf3e1876a22e2dfc5ab490aa1d.png

不过我一般习惯与点左下角的那个按钮,将开发者工具弹出作为一个独立的窗口:

cb9d9cec8a99831fc0907567882f7b22.png

2.1.2 调试功能标签页说明

2.1.2.1 Elements标签页

这个就是查看、编辑页面上的元素,包括HTML和CSS:

4e6feabbee3094f3f3754d4bb3fe13df.png

左侧就是对页面HTML结构的查看与编辑,你可以直接在某个元素上双击修改元素的属性,或者你点右键选"Edit as Html"直接对元素的HTML进行编辑,或者删除某个元素,所有的修改都会即时在页面上得到呈现。(注:看到上面右键菜单的最后一个选项"审查元素"了么?这是不是说明这个开发者工具的页面也是HTML来的呢?你点一下就知道了,嘿嘿)

你还可以对某个元素进行监听,在JS对元素的属性或者HTML进行修改的时候,直接触发断点,跳转到对改元素进行修改的JS代码处:

f34bd622abe6643a4cdbb5714e746911.png

Elements标签页的右侧可以对元素的CSS进行查看与编辑修改:

63672926c537f8002e5daccbe7d25a5b.png

你还可以通过这里看到各CSS选择器设置的CSS值的覆盖情况。

下面的Metrics可以看到元素占的空间情况(宽、高、Padding、Margin神马的):

284c7da3b8a68de7f709f1154842dc9b.png

注意到上面的Properties没有?这个很有用,可以让你看到元素具有的方法与属性,比查API手册要方便得多(要注意某些方法和属性在IE、FireFox等其他浏览器下面的支持情况)。

2.1.2.2 Resources标签页

Resources标签页

99076cde9f89ea4caa362913da29fa39.png

Resources标签页可以查看到请求的资源情况,包括CSS、JS、图片等的内容,同时还可以查看到存储相关的如Cookies、HTML5的Database和LocalStore等,你可以对存储的内容编辑和删除。

这里的CSS文件有一个好玩的特性,你可以直接修改CSS文件,并且修改即时生效:

2fd3fdfa4a5f0f9aacad4427c097a3b7.png

2.1.2.3 Network标签页

Network标签页

761aa5323597332ade421b60602de5c9.png

Network标签页对于分析网站请求的网络情况、查看某一请求的请求头和响应头还有响应内容很有用,特别是在查看Ajax类请求的时候,非常有帮助。注意是在你打开Chrome开发者工具后发起的请求,才会在这里显示的。

点击左侧某一个具体去请求URL,可以看到该请求的详细HTTP请求情况:

744f42b4954ab39878019b3b1361d131.png

我们可以在这里看到HTTP请求头、HTTP响应头、HTTP返回的内容等信息,对于开发、调试,都是很有用的。

2.1.2.4 Script标签页

很明显,这个标签页就是查看JS文件、调试JS代码的,直接看下图的说明:

e32b7f94d2845acf319d2bd2baae6c4b.png

还有你可以打开Javascript控制台,做一些其他的查看或者修改:

a2a57c5121fc9f807e664365b4b8b36c.png

你甚至还可以为某一XHR请求或者某一事件设置断点:

5404b38d0c3cd62a0c0195650ee82b51.png

2.1.2.5 Timeline标签页

注意这个Timeline的标签页不是指网络请求的时间响应情况(这个在Network标签页里查看),这个Timeline指的JS执行时间、页面元素渲染时间:

470cbbb36e5686cf44d979d274ec8541.png

点击底部的Record就可以开始录制页面上执行的内容。

2.1.2.6 Profiles标签页

Profiles标签页,这个主要是做性能优化的,包括查看CPU执行时间与内存占用

00faae86464895facd6119f9b405d9b7.png

6a2755c516353f0676440edd3a97a619.png

2.1.2.7 Audits标签页

这个对于优化前端页面、加速网页加载速度很有用(相当与Yslow):

bd6147c27094e79d74132b15bb720168.png

点击run按钮,就可以开始分析页面,分析完了就可以看到分析结果了:

65561e8923a389abd8309e683caa625a.png

它甚至可以分析出页面上样式表中有哪些CSS是没有被使用的:

8a7a4c44cc0a1dfb0e1411ac9eb5390b.png

2.1.2.8 Console标签页

就是Javascript控制台了:

c4e78fb840a290f22814dcebe95b3ed1.png

这个除了查看错误信息、打印调试信息(console,log())、写一些测试脚本以外,还可以当作Javascript API查看用。例如我想查看console都有哪些方法和属性,我可以直接在Console中输入"console"并执行:

2a31e2cb42a0e9096bec20bb5d171273.png

怎么样,一目了然了吧 ?再例如我想查看日期函数都有哪些方法:

2bcb38da7d486259bf12450e6a385c8f.png

(注:注意在这里看到的某些方法和属性是ES5新增的,记得兼容其他浏览器的支持情况)

2.2 IE浏览器调试

注意:IE版本需要在IE8或以上版本

2.2.1 启用调试

双击IE浏览器的图标,打开IE浏览器

b0dfe4dfb8830ba97274e49952ca3e1c.png

点击键盘上的"F12"键,或者在ie工具栏下点击"开发人员工具",进入调试界面

286e47c2660dc15fae9556062490133f.png

2.2.2 开始JS调试

选"脚本"选项卡,找到要调试的代码行,然后右击添加断点,或者直接点击也会出现断点。

32fc91b17f2a1ba9b95c629caa30af3b.png

点击启动调试,就会跑到设置的断点处。"F11"可以一步一步调试,"F10"逐过程调试,"shift+F11"跳出

0beaaa64271ed29363ddd9265f8598b5.png

2.3 火狐浏览器调试

2.3.1 概述

在FireFox上插件库里找到FireBug安装即可,网上下载进行安装。下图是FireBug Debug 窗口。

2e082d6a8db26ec79e14079ea106531d.png

FireBug美工用的非常普遍,公司美工妹妹用的非常熟练 呵呵,而对于我们开发人员,主要用它来Debug JS。看看官方对Debug功能的介绍。

Firebug includes a powerful JavaScript debugger that lets you pause execution at any time and see what each variable looked like at that moment, If your code is a little sluggish, use the JavaScript profiler to measure performance and find bottlenecks fast,

简而言之,FireBug 可以让我们在任何时候debugJS 并查看变量,同时可以通过它找出JS中性能瓶颈。

2.3.2 调试步骤

下图是如何找到Web应用的JS,激活Firebug,点Script,然后在All 旁边选择你要Debug的JS。

0284e133b9b859d30bb4daddbf4b6eb7.png

下图是如何打断点 基本跟Eclipse一样,点击行号就Ok了。

91b7191f260837c479c5450b8d866b1f.png

下图是如何在断点上设定条件,如果条件符合,就进入断点,这个功能很不错,特别是Debug很复杂的Function时候。

fd1470050acc6ecc8254a388c6f108f4.png

下图是如何单步调试,跟Eclipse一样 F11单步

695747a3f02ddc23edaf86b4969a33a0.png

下图是查看调用的Stack,对以复杂的JS Debug很有帮助。

bc5b8b4a78e5558ea94b2cafe89be195.png

下图是查看变量 基本跟EclipseDebug 一样。

efa46b4cda10d2941c83b1f11a1d582c.png

下图是在断点处查看变量。

aa0cc44fca0109c69d11cb4a4ad642bb.png

有个很好用的功能,代码行之间快速调转,使得对上千行的JS调试很轻松。

45b58e0dce944ee94abfd8b37f9b1e98.png

下图就是Performance 测试结果,使用很简单 点Profile

fe71de325f78081e68311624de6593a1.png

还有一个Log功能比较实用,看下图 如果你不想每次都进入断点,用这个就再好不过了。

029b8d7de32edd6f0f4bb26aad722dc1.png

三. 注意

本文的调试只是常用的一些方法,只能给大家一个方向,同时由于工具版本原因,在实践过程中若有迷茫的地方,请到网上查询解惑

# 链接 Java程序员福利"常用资料分享"

4737a68ecd00519cb85f5a94dd793f45.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode笔记】279. 完全平方数(Java、动态规划)

文章目录题目描述思路 & 代码题目描述 类似找零钱&#xff0c;思路和代码框架基本上一样 思路 & 代码 考虑到这么一点&#xff1a;某完全平方数&#xff0c;肯定是由另一更小的完全平方数 一平方组成比如 16 8 4 (完全平方数82222)22(完全平方数82^2 2^2) 2^…

怎么判断一个字符串的最长回文子串是否在头尾_每日一道算法题,让你的头脑更活跃(寻找最长回文子串)...

前言最近准备把算法慢慢的捡起来&#xff0c;所以准备日更一道算法题目&#xff0c;难度自然是由简入难&#xff0c;所以同学们可以每天都来看看小编的更新。日更时间定在每晚20:00&#xff0c;希望大家多多关注啦。昨天就欠更了&#xff0c;简直就是打脸。过完年刚开工&#x…

【LeetCode笔记】322. 零钱兑换(Java、动态规划)

文章目录题目描述思路 & 代码题目描述 和完全平方数基本上一样啦&#xff0c;但是我觉得这道题的判断 & 循环处理更恶心 思路 & 代码 相对于完全平方数&#xff0c;这里要考虑零钱数组无序&#xff0c;要先进行排序与此同时&#xff0c;还要考虑零钱数组的值并…

计算机主机接线视频教程,电脑主板跳线怎么接?电脑机箱与主板跳线接法图解教程...

电脑组装其实并不难&#xff0c;对于一个DIY老手三下五除二就组装好了&#xff0c;但对于新手装机来说&#xff0c;最大的难点就是主板与机箱之间的跳线的接法&#xff0c;那么电脑主板跳线怎么接&#xff1f;下面装机之家小编分享一下电脑机箱与主板跳线接法图解教程。这款机箱…

英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少

文章选自公众号“电脑报”&#xff1a;英特尔也玩马甲&#xff1f;有关USB Type-C的冷知识你了解多少随着Type-C接口的不断发展&#xff0c;这个接口也成为越来越多设备的标配&#xff0c;除了出现在手机、平板电脑和笔记本电脑等移动设备上&#xff0c;显卡这样的设备也开始配…

【LeetCode笔记】394. 字符串解码(Java、递归、栈)

文章目录题目描述思路 & 代码更新版题目描述 开心&#xff01;&#xff01;独立思考字符串题&#xff0c;还AC了&#xff0c;成就感满满 XD难点应该是在于嵌套括号&#xff0c;那么这里实际上还要考虑到一个类似于括号匹配的事情谈到括号&#xff0c;那么大概率用到栈 思…

ad19pcb设置恢复默认_苹果手机便签怎么恢复系统默认的内容分割线?

苹果手机上虽然没有系统自带的便签app&#xff0c;但是可以添加使用第三方的敬业签。敬业签&#xff0c;是一款支持备忘内容云端同步并提醒的跨平台(Windows电脑﹑安卓手机﹑苹果iPhone手机﹑iPad﹑苹果电脑Mac端以及网页Web端)桌面便签软件&#xff0c;备忘效果更好&#xff0…

【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)

文章目录题目描述思路 & 代码题目描述 比 leetcode 136要难点注意&#xff1a;空间复杂度要求O(1)&#xff0c;否则用哈希表直接秒杀啦。昨天的笔试&#xff0c;还有刷的面经都有这道题。。。今天赶紧补补 思路 & 代码 相对于 leetcode 136&#xff0c;这边多了个分…

电脑计算器的快捷键_牛!这份金蝶财务软件使用手册+超全快捷键汇总送你,财务收好...

金蝶财务软件想要使用的好是有技巧的&#xff01;快捷键简易汇总&#xff1a;快捷键详细说明1、凭证处理①、摘要栏两种快速复制摘要的功能&#xff0c;在下一行中按“..”可复制上一条摘要&#xff0c;按“//”可复制第一条摘要。同时&#xff0c;系统还设计了摘要库&#xff…

【LeetCode笔记】415. 字符串相加(Java、字符串)

题目描述 不能直接把字符串转换成整数&#xff08;会溢出&#xff09;面试被问过&#xff0c;今天刷面经又刷到。。那就索性水一篇文吧&#xff01;更新&#xff1a;原题就是 leetcode 415 思路 & 代码 只要理好字符串s、字符串t、答案字符串的对应位关系就好啦&#x…

opcua 入门简介 java_大二的学生自学Java有出路吗?

这个是技术&#xff0c;学好了必须是有出路的&#xff0c;当然你喜不喜欢还得看后面的学习情况&#xff0c;三天热火气的情况大有人在&#xff0c;更有甚者就是&#xff0c;系统培训完&#xff0c;上了半年的班了&#xff0c;后转行到别的也有&#xff0c;所以兴趣是自己的最大…

【LeetCode笔记】232. 用栈实现队列(Java、栈、队列)

题目描述 经典题了&#xff0c;貌似现在面试也有点喜欢问&#xff0c;今天补补题&#xff01;要实现均摊时间复杂度O(1)噢 思路 & 代码 用两个栈来实现&#xff1a;输出栈 & 输入栈输出栈 out&#xff1a;负责 pop、peek输入栈 in&#xff1a;负责 push关键点&…

如何安全使用计算机,如何安全的使用计算机

如何安全的使用计算机导语&#xff1a;关于电脑的使用&#xff0c;如何正确的安全的使用好电脑&#xff0c;其实很多人都会有这个意识。以下是小编精心整理的有关电脑安全的知识&#xff0c;希望对大家有所帮助。一是要注意环境。环境温度在15℃&#xff5e;35℃为宜&#xff0…

调节e18-d80nk的测量距离_地坪研磨机磨盘平整度的调节方法及好处

地坪研磨机磨盘平整度的调节方法及好处名词解释调节磨盘平整度主要是指将四个磨盘调到静止或运转时磨盘趋向处于同一个平面。 调节方法 1、采用一把高度卡尺或任意一把尺条测量准确磨盘面到箱体底部边沿距离2、采用10MM内六角扳手、调节M12的不锈钢内六螺丝&#xff08;如图1&…

【LeetCode笔记】225. 用队列实现栈(Java、队列、栈)

题目描述 感觉栈实现队列更简单&#xff0c;不过这个也还好写法有点像 JVM GC 里的复制算法 思路 & 代码 两个队列实现栈&#xff1a;from、tofrom&#xff1a;实际上的栈&#xff0c;存储元素就是按照栈的顺序来&#xff0c;负责pop、topto&#xff1a;辅助队列&#…

微型计算机最怕的是什么,为什么以前学生上“微机课”都要穿鞋套?老师:怕电脑中病毒...

原标题&#xff1a;为什么以前学生上“微机课”都要穿鞋套&#xff1f;老师&#xff1a;怕电脑中病毒前不久&#xff0c;知乎上一则问答短短一周便收获了近400万浏览量。“为什么小时候去计算机教室要穿鞋套&#xff1f;”看着网友们的回复&#xff0c;小酷想起了小学时期&…

iphone屏蔽系统更新_手贱更新了 iphone系统,想退回到原来的版本,这个方法简单易用...

应该有很多人都很烦iphone的系统更新&#xff0c;开着wifi一夜睡醒&#xff0c;就欢迎你来到最新系统&#xff0c;新版本出来之后&#xff0c;各种媒体消息铺天盖地而来&#xff0c;类似于呼吁大家赶快更新享用新功能&#xff0c;殊不知系统更新有两种&#xff0c;都不适合马上…

【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)

题目描述 因为自己写的复杂度已经到了 O(n)&#xff0c;就没有再参考题解的优化了更新&#xff1a;滑动窗口方法 思路 & 代码 用一个 int[ ] count 来存储当前判断子串的各字母出现次数getCount()&#xff1a;对当前子串&#xff0c;求 count&#xff0c;时间复杂度 O(…

电脑入门完全自学手册_电气自动化自学宝典——看过人人都是工程师

原标题&#xff1a;电气自动化自学宝典——看过人人都是工程师怎样快速成为一名电气自动化工程师呢&#xff1f; 对于一些对电气技术一无所知或略有一点基础的人来说&#xff0c;要想成为一名电气自动化工程师或达到相同的技术程度&#xff0c;有什么速成的方法吗&#xff1f;如…

【LeetCode笔记】213. 打家劫舍II(Java、动态规划)

文章目录题目描述思路 & 代码更新版题目描述 在 I 的基础上&#xff0c;分成两部分&#xff0c;再取 Max 就行 思路 & 代码 由题意可知&#xff1a;一种路线中&#xff0c;不能同时出现第一家和最后一家。那么好办了&#xff0c;直接分成两部分分别取&#xff1a;不…