java 调试 工具_Java调试器–权威的工具列表

java 调试 工具

Java调试是一个复杂的空间。 调试器的类型很多,工具也很多。 在此页面中,我们将介绍7种类型的调试器之间的区别,并查看每个类别中的主要工具,以帮助您为正确的工作选择正确的工具。 公爵

以下是我们介绍的调试器类型:

  • CLI调试器
  • IDE调试器
  • 构建自己的调试器
  • 堆转储
  • 历史调试器
  • 动态追踪
  • 生产调试
  • 塔基皮

定义

使用广泛的定义,错误是实例,其中我们编写的代码与我们获得的输入不匹配。 这些的不同影响可以大致分为–

  1. 意外的流控制 ,导致异常或代码中我们不希望出现的位置。 在这里,调试器通常用于检查代码和状态的相关性。
  2. 意外的堆分配 。 在这种情况下,我们要么分配了太多的对象,要么分配了太大的对象。 保留对这些内容的长期引用只会增加乐趣。 这就是堆分析器起作用的地方。
  3. 延迟流量控制 。 这很可能与我们将错误的输入传递给外部调用(即“ SELECT * FROM everything”)或卡在长循环或无限循环中有关。 这是性能分析器通常会出现的地方。

当然,工具和类别之间存在重叠,因为它们本质上都具有相同的目的-让我们看到我们所期望的状态,以便我们可以修复代码,并使其达到期望。

1.命令行调试器

jstack

主要工具 :主要参与者是jdb ,它是JDK附带的,与JVM等效,是gdb。 它具有命令行界面,可以连接到正在运行的JVM。 像gdb一样,它的功能也很强大,您可以使用jdb进行任何功能,就像使用功能强大的IDE调试器一样。 jdb有一个补充-jstack-它使您可以在给定时刻打印实时JVM的线程调用堆栈。 但是,这不会捕获变量或堆状态。

以下情况下使用 :jdb的最大优点是其可移植性。 您可以相当快地将其安装到服务器上,而不必远程连接调试器。 如果您正在处理服务器上的恶劣环境,并且有能力让JVM检查它,那么jdb是您最好的朋友。

缺点 :jdb和jstack的缺点是,与其他命令行工具一样,它们在日常使用中效率不高。 这将我们带入下一个类别。

2. IDE调试器

网豆

主要工具 :Eclipse和NetBeans是该类别中的两个工具。 两者都使用与jdb类似的技术来附加或启动新的JVM。 尽管不是很轻便,但您确实会遇到麻烦,这可以使调试更短,更有趣。

以下情况下使用 :假设您每天都不是Dexter( 神童 ,而不是连环杀手)。

缺点 :作为高端桌面应用程序,它们不是您要在生产计算机上运行的东西。 始终存在进行远程调试的可能性,但是在复杂的环境中,解决该问题的可能性很小。

3.构建自己的调试器

blog_MyDebugger2

到目前为止,我们已经描述的所有调试器都基于相同的JVM开放调试体系结构,最常见的是使用JDWP(Java调试器有线协议)与正在运行的JVM通信。 JSwat是在此框架之上构建的独立调试器的示例。 是否想学习如何构建自己的Java / Scala调试器? 请点击这里 。

以下情况下使用 :构建自定义JVM扩展,或者对JVM的工作方式非常感兴趣。

缺点 :这是一件很复杂的事情,尤其是当您不想影响目标JVM的状态时,这是非常正确的事情,因此,您需要一个非常有说服力的理由来说明为什么不能使用经过考验的现有工具。

4.堆转储

虚拟机

主要工具 :jmap,MAT。 在许多情况下,就像Rick Grimes一样 ,您正在与死者打交道。 在这些情况下,您正在查看的是JVM堆的快照,而不是已停滞的实时JVM的快照。 JDK附带的jmap允许您从实时JVM生成堆转储。 有很多工具可以让您浏览和分析转储。 JDK附带的jhat和visualVM在这方面做得很好。 Eclipse插件MAT和NetBean的HeapWalker是很好的选择,因为它们利用了已经强大的IDE UI。

以下情况下使用 :发生复杂错误且无法应用常规调试技术(例如,该应用程序在客户的服务器上运行)。 另一种选择是通过打开JVM -HeapDumpOnOutOfMemoryError标志来使用堆转储来分析内存泄漏,以使JVM在堆耗尽后自动转储堆的内容。

缺点 :使用堆转储的最大缺点是它们的重量与堆本身的重量一样大(这很可能意味着堆在GB中)。 然后必须将其转回给您进行分析。 在生产中捕获它们也不是在公园中漫步。

5.历史调试器

chornon1

主要工具 :这类工具取决于您是否能够或不想停止JVM来收集状态或进行堆快照。 Chronon DVR是这种方法的一个很好的例子。 在此,调试器使用字节码检测从代码本身内部记录数据。 这通常包括诸如调用方法的顺序以及传递给它们的参数之类的事情。 这使调试器可以“重播”代码,并让您了解执行时的流控制。 重播解决方案(由CA收购)是另一种使用不同方法的示例,其中记录了对JVM的IO输入,然后将其“重播”回活动实例–模拟执行后的代码。

以下情况使用 此类工具的主要途径通常是在质量检查期间,通过捕获实际的运行时状态,它们可以帮助使错误更易于重现。 另一种情况是让客户或支持工程师临时运行该工具,以在应用程序在生产中表现异常时从JVM捕获状态。

缺点 :这些工具的最大缺点是日志记录会花费您很多,而日志记录会花费很多。 这意味着历史悠久的调试器可以将应用程序的速度降低50%到一个数量级,从而限制了可以使用这些应用程序的生产方案的数量。

6.动态跟踪

btraceResults

主要工具 :BTrace。 使用此类别中的工具,您可以从正在运行的JVM中有选择地打印(“跟踪”)状态信息,而无需暂停它,也不必记录正在发生的一切。 可以将它视为动态编织到一段新代码中,该新代码从代码本身中打印值以供您查看。 BTrace是一个杰出的工具,它引入了自己的语法,可让您定义要在代码中跟踪的位置和内容。 该语法还设计为仅支持只读操作,以防止您实际更改程序的状态或引起无限循环。

以下情况下使用 :最常用于尝试针对特定问题调试服务器(例如,连接池已耗尽)或在不停止JVM执行的情况下临时收集特定统计信息的情况。

缺点 :与调试器一样,通常不建议从生产服务器进行动态跟踪(并且很多时间是不允许的)。 还有一个小的学习曲线,可以在服务器环境中有效地使用动态跟踪。

7.生产调试

Logstash

主要工具 :用于记录状态的日志记录框架(log4j,Logback)和用于大规模分析数据的日志分析器(Logstash,Splunk…)。

以下情况下使用 :这是一个相当困难的区域,因为当您处理生产系统时,使JVM停顿以查看状态或进行堆转储通常是很大的禁忌。 那是因为您实际上是要关闭服务器来调试它,这通常仅在极端情况下才能完成。

我们通常在运行时从JVM中提取状态而不停止状态的方法是通过有选择地将变量值记录到文件中(通常是在Java记录框架的帮助下)。 稍后,我们可以使用各种工具来解析数据,从简单到尾部,一直到可扩展的日志分析器,例如开源Logstash和企业Splunk。

缺点 :这里最大的缺点是我们当然需要事先知道(并有效地执行)登录。 日志也可以很快被填满,并且无需开发团队的大量纪律,还可能包含很多不必要的数据或错过了一些关键数据。

科学家观察到,将日志文件中的数据拼凑在一起以了解导致错误的变量状态,这是夜间和假日消遣的一种非常受欢迎的开发人员。


塔基皮

我们在构建Takipi时考虑了一个简单的对象。 我们想让开发人员轻松知道何时以及为何中断生产代码。 这意味着,无论何时开始发生新的异常或日志错误,我们都会捕获它并通知您。 第二部分是跟踪部署,以说明问题从哪个开始以及发生的频率。 最后(也是最有趣的部分)是生产调试部分。 对于每个异常或错误,Takipi会在错误发生时向您显示确切的源代码和变量状态(包括本地值和对象值),就像发生错误时您在那儿一样。

参考: Java Debugger –我们的JCG合作伙伴 Tal Weiss在Takipi博客上的权威 工具清单 。

翻译自: https://www.javacodegeeks.com/2013/12/java-debugger-the-definitive-list-of-tools.html

java 调试 工具

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

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

相关文章

移动通信考前预习_第2章_蜂窝技术

一、蜂窝的概念 1、系统级的概念:用许多小功率的发射机(小覆盖区)来代替单个的大功率发射机(大覆盖区),每个小覆盖区只提供服务范围内的一小部分覆盖。 2、不需要做技术上的重大修改,没有增加额…

移动通信蜂窝原理例题整理

目的很功利:会做题。 So~~上题!!! 1、求波长和天线长度。 不接地天线长度是半波长整数倍,接地是1/4波长整数倍(地面镜像效应)。 2、大区制小区制概念理解 举例:30个双向信道 1、大…

spss三次指数平滑_17 统计学:SPSS基础

内容目录为什么要学习SPSSspss发展史spss操作界面spss基本使用方式SPSS的常用操作数据管理spss制作图表使用spss进行描述统计分析1.为什么要学习SPSS统计分析软件是数据分析的主要工具统计设计完成后,完整的分析过程包括数据的搜集数据的整理数据的分析结果的报告统…

outlook邮箱邮件内容乱码_VBA:Outlook和Excel综合运用

很多企业公司使用微软OUTLOOK作为公司邮箱进行业务往来。 我们经常需要将一些表格数据也展示给收件人,但是又不需要将整个工作簿添加为附件,那么最好的方法就是复制指定单元格区域内容然后粘贴进新邮件界面内就可以了。 偶尔写一个邮件,这样做…

JDK 9、10和11中的安全性增强

缩短JDK发布周期的原因之一是有可能推出更快的安全错误修复和增强功能。 在本文中,我们将简要回顾一下最新JDK版本中引入的主要安全增强功能。 由于这些增强功能中的大多数与TLS相关,因此必须了解TLS握手过程,如下图所示: JDK 9 …

三星q90r如何升级系统_看尚电视强制升级风行系统,如何安装第三方软件?

最近,看尚电视强制升级系统,不论界面UI还是操作方式都与之前有所不同,就连就简单的下载第三方软件,很多用户表示升级之后处处碰壁,那么今天小编就来和大家讲一下升级之后所遇到的问题,方便大家及时熟悉新系统。1、如何安装第三方软件这次看尚电视升级后,安装第三方软件的方式与…

移动通信考前预习_第4章_全球移动系统(GSM)

课件例题 例: 现GSM系统有10MHz的频段,如果采用434\times343的频率复用,试求出这个系统里基站的频点配置。若改成333\times333的频率复用,那么情况又是如何? 练习: 现GSM系统有6MHz的频段,如果…

Github常用搜索指令(毕设资料搜索必备)

1、language:限制语言 2、in:根据某个关键词来进行检索 关键词name项目名称description项目描述readme项目帮助文档语法:需要检索的内容 in:name或description或reademe 组合使用:加逗号即可 3、根据starts或fork关键词查找 单…

dev分支和master是什么_天天用Git,分支开发你怎么弄的?

来源| juejin.im/post/6844903635533594632Git 是目前最流行的源代码管理工具。为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范git的相关操作。分支命名1、master 分支master 为主分支,也是用于部署生产环…

gradle ant_区分基于Ant目标的Gradle任务

gradle ant在我的博客文章《 从Ant Build演变Gradle构建:导入Ant构建文件》中 ,我演示了如何使用Gradle内置的基于AntBuilder的Ant支持在Gradle构建中导入Ant目标。 然后,可以将这些Ant目标作为Gradle任务进行访问,并与Gradle构建…

labview求n阶乘的和_求极限方法总结

函数的极限第一步:判断极限类型1、 型常用方法:①洛必达法则 ②等价无穷小代换 ③泰勒公式2、 型常用方法:①洛必达法则②分子分母同除以分子和分母各项中最高阶的无穷大③基本极限: 当nm时,极限等于 ,当n<…

uniapp怎么引入css_CSS 三种基础选择器

本节我们来学习 CSS 中的选择器,选择器是 CSS 里面一个很重要的概念,HTML 中的所有标签样式,都是通过不同的 CSS 选择器进行控制的。我们只需要通过选择器,就可以对不同的 HTML 标签进行选择,并指定各种样式声明。在 C…

万网绑定二级域名_Hexo+yilia主题网站绑定个性域名

上篇我们已经成功部署了自己的博客网站,初始化的网站看上去似乎少了些内容(高端大气上档次的设置)。接下来我们就进一步完善我们的博客网站(孟繁胜游)。绑定个性域名当你打开github给你设定的固定域名时,是不是感觉low极了。主要是github给你的域名在你注…

javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第1部分

javafx 自定义控件几周前,由于Hendrik Ebbers的出色文章 ,我决定花一些时间观看有关JavaFX的JavaOne讨论。 我不得不说我已经学到了很多东西,只是看这些视频(即使我还没有完成)! Gerrit的“使用力&#xf…

不等号属于不等式吗_考研专业课备考时,仅仅多刷几遍目标院校的期末考试题就够吗?...

考研专业课备考时,仅仅多刷几遍目标院校的期末考试题就够吗?也许这要看各专业情况,部分专业的考研题和本科生的期末考试题难度类似,比如说人文社科类的专业,这也是我的猜测情况。大部分专业的专业课题目难度&#xff0…

使用Spring Boot和H2可以完全工作的原型

我们确实在弹簧上使用了很多h2,特别是对于单元测试。 但是,我们可能希望拥有一个功能齐全的原型来显示数据,而不是进行单元测试。 H2是最理想的选择,它在spring上运行良好,与大多数数据库都具有良好的语法兼容性&…

饿了吗商品列表_仅仅一字之差,饿了么起诉饿了吗

饿了么与“饿了吗”,仅仅一字之差,相信不少人乍看会以为是一家。但近日公开的一则判决书显示,因为太近似,二者曾对簿公堂。饿了吗公司以败诉收场,被判处立即变更其企业名称,变更后企业名称中不得含有与“饿…

pandas 遍历并修改_Pandas循环提速7万多倍!Python数据分析攻略

乾明 编译整理 量子位 报道 | 公众号 QbitAI用Python和Pandas进行数据分析,很快就会用到循环。但在这其中,就算是较小的DataFrame,使用标准循环也比较耗时。遇到较大的DataFrame时,需要的时间会更长,会让人更加头疼。现…

教程:用Java创建和验证JWT

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 Java对JWT(JSON Web令牌)的支持过去需要进行大量工作&#xf…

AWS re:Invent 2018的5大公告

AWS re:Invent刚刚完成。 这是一个巨大的活动,在拉斯维加斯7家最大的酒店中,有50,000多名与会者,并发布了许多新服务。 无服务器通过新的lambda增强功能和更好的容器支持而继续引起人们的广泛关注。 AWS通过新的“ Outposts”功能…