每个Java开发人员应拥有的持久断点

当开发人员使用Java进行工作时,即使您尝试调试其他内容,也总是会遇到一些失败的情况。 这是应该在每个IDE中启用的持久断点的列表。 (恕我直言)

是的,从理论上讲,您应该能够从良好的日志记录实现中获得此信息。 但是这些问题通常是由于无法控制的更改而在其他人的库中深层隐患……或仅隐藏在大量当前正在执行的线程中。 如今的Java在调试模式下运行没有太多开销,通常,如果没有附加调试器,我永远不会运行我正在处理的任何事情,因为HotSwap极大地提高了生产率。

我很想知道其他人必须有断点。 它们应该是您想立即知道的,在应用程序的正常运行中永远都不会出现的故障。

死锁检测

VM在识别底层Java合约中的死锁方面越来越好,调试器应该可以选择打破死锁。 您应确保默认情况下已将其打开。

在java.lang.ExceptionInInitializer上

进行跟踪可能会很痛苦,因为在更深的一层它可能会变成ClassNotFoundException,并且通常,如果下降了多个级别,则没有明显的原因可以使间接引用类无法加载。

通常是由于人们使用引发RuntimeExceptions的方法/构造函数初始化公共/最终/静态变量。 如果不确定使用带有正确错误处理的static {}块,请不要在其中执行依赖于当前jar文件外部内容的操作。

在java.lang.NoClassDefFoundError上

在OSGi中工作时总是很流行,通常您忘记了一个依赖的jar文件,并且看到这种类型的故障。 有趣的是,有时您只会在特定类的第一次抛出此异常时才找到原因。 因此,如果您有断点,则可以更快地进行跟踪。

我发现有时候在一些反射代码后面没有碰到断点。 在那种情况下,我经常在此类的构造函数中有断点以确保。

在java.lang.NoSuchMethodError上

如果您在本地未正确构建,或者使用的是错配版本的库,那么您当然通常会看到此信息。 您总是想知道这一点。

在java.lang.LinkageError上

通常,只有在情况确实变糟时才出现这种情况,例如,当您挂起同一个类的两个版本,即使它们来自同一个jar文件时。 (必须爱多级装载机)值得庆幸的是,这些装载机不会经常出现,通常会在我已经非常头痛的时候进行。

关于java.lang.OutOfMemoryError / java.lang.StackOverflowException

如果您很幸运,VM会为此中断。 但是不幸的是,在本机代码中会发生很多时间,您只需要处理这些后果。

为后者获取完整的堆栈有点麻烦; 但并非不可能。 有关获取完整堆栈跟踪的信息,请参见此较早的文章。

在java.lang.AssertionError上

数量惊人的人使用断言,然后在调试或运行测试时抱怨异常时感到不高兴。 (您正在使用-ea执行此操作,对吗?)

缺点是您想在调试某些测试框架时将其关闭,我正在查看您的JUnit,因为当您只想运行所有测试时碰到断点并没有完全帮助。

最后,我会不时地遍历以下代码,这将导致一个异常,仅用于测试是否启用了断言。

boolean assertionsEnabled = false;try{ assert false; }catch (AssertionException ae){ assertionsEnabled = true }

更新:一位乐于助人的同事指出,我应该就应替换此代码提供一些替代建议。 第一种选择是调用Class.desiredAssertionStatus,但是如果您要完全确定,可以使用以下代码,该代码使用赋值来捕获断言状态而不会引发异常。

boolean assertionsEnabled = false;assert isAssertionsEnabled = true;

参考: Gerard Davison博客博客中, 每个Java开发人员都应从我们的JCG合作伙伴 Gerard Davison获得持久性断点 。

翻译自: https://www.javacodegeeks.com/2013/05/persistent-breakpoints-every-java-developer-should-have.html

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

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

相关文章

tmux颜色高亮跟vim不一致的情况

安装完tmux之后,按照网上大神的配置,稍微配置了下~/.tmux.conf: # 改变快捷键前缀 unbind C-b set -g prefix C-a # 绑定配置加载按键 bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."# 设置终端类型为2…

html5表白页面3d,七夕节表白3d相册制作(html5+css3)

七夕节表白3d相册制作涉及知识点定位阴影3d转换动画主要思路:通过定位将所有照片叠在一起,在设置默认的样式以及照片的布局,最后通过设置盒子以及照片的旋转动画来达到效果。代码如下:3d相册/* 使用单位将所有照片叠在一起 */img{…

(1)pandas 基础教程

步骤1、环境准备 右击桌面上选择【Open in Terminal】 打开终端。在弹出的终端中输入【ipython】进入Python的解释器中,如图1所示。 图1 ipython解释器步骤2、导入所需要的包 导入实验常用的python包。如图2所示。【import pandas as pd】pandas用来做数据处理。【i…

使用Java WebSockets,JSR 356和JSON映射到POJO的

因此,我一直在研究Tyrus (JSR 356 WebSocket for Java规范的参考实现)。 因为我一直在寻找测试工具,所以我对在Java中同时运行客户端和服务器端感兴趣。 因此,恐怕此博客文章中没有HTML5。 在此示例中,我们…

CSS3效果:波浪效果

实现效果 如图所示: 首先得准备三张图,一张是浅黄色的背景图loading_bg.png,一张是深红色的图loading.png,最后一张为bolang.png。 css代码 body{background:#ffe894;}.loading_bg{width:113px; height:111px;background:url(lo…

集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)

小数据池#int比较数值is 比较内存地址id 测试内存地址#str不能含有特俗字符单个元素*数字,不能超过21i1 ‘a’*20i ‘a’*20id一样i1 ‘a’*21i ‘a’*21id不一样编码ascii 英文的数字,字母,特殊字符字节8位表示一个字节字符内容的最小…

html创建文件域的代码,word如何插入域代码

在word里怎么进行域代码的设置?如果知道要插入的域的域代码,可以将其直接键入在文档中。首先按 CtrlF9,然后在括号中键入代码就可以了。【Word插入域方法】1、Word2007中,在要插入域的位置单击。2、在“插入”选项卡上的“文字”组…

大学屌丝男

哈哈,来晚了呀转载于:https://www.cnblogs.com/wainiwann/p/7909765.html

前端页面适配的rem换算

为什么要使用rem 之前有些适配做法,是通过js动态计算viewport的缩放值(initial-scale)。 例如以屏幕320像素为基准,设置1,那屏幕375像素就是375/3201.18以此类推。 但直接这样强制页面缩放过于粗暴,会导致页…

lt form gt 在html,HTML lt;formgt; 标签的 accept

HTML <form> 标签的 accept2018-11-20在跨业务、跨网站发送数据或者业务升级的时候&#xff0c;我们有的时候需要指定发送数据的编码方式&#xff0c;比如页面表单的编码是UTF-8的&#xff0c;而提交到目标页面的编码是GBK编码时&#xff0c;会用到表单的accept-charset属…

使用Java ThreadLocals的意外递归保护

对于那些使用第三方工具来尝试扩展它们而又不完全了解它们的人来说&#xff0c;这是一个小技巧。 假定以下情况&#xff1a; 您想扩展一个公开分层数据模型的库&#xff08;假设您要扩展Apache Jackrabbit &#xff09; 该库在访问内容存储库的任何节点之前会内部检查访问权限…

今日头条竞价接口转发

一、代码 ①类名 public class TouTiao{public class model{public string site_id { get; set; }public string ad_id { get; set; }public List<Data> data { get; set; }}public class Data{public string label { get; set; }public string lable { get; set; }publi…

art-template辅助函数和子模板

art-template 前端使用 用途&#xff1a;主要用来处理数据和优化性能&#xff0c;与其他的一些模块化处理数据的插件相比&#xff0c;art-template处理性能好 不废话&#xff0c;上代码 1.art-template基本语法使用 <script src"template.js"></script&…

微处理器 微型计算机系统,作业答案11微处理器微型计算机和微型计算机系统三者之间.DOC...

作业答案11微处理器微型计算机和微型计算机系统三者之间第1章 作 业 答案1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同?把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微处理器。微处理器加上一定数量的存储器和外部设备(或外部设备的接口)构…

C# 对轻量级(IoC Container)依赖注入Unity的使用

概述 Unity是一个轻量级的可扩展的依赖注入容器&#xff0c;支持构造函数&#xff0c;属性和方法调用注入。Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题。构建一个成功应用程序的关键是实现非常松散的耦合设计。松散耦合的应用程序更灵活&#xff0c;更易于…

为什么同步的StringBuffer从来都不是一个好主意

介绍 StringBuffer是用于可变字符串的同步类。 使其同步的主要问题是 它通常用作局部变量&#xff0c;因此使其同步只会使其变慢。 以多线程方式使用它从来不是一个好主意。 这个问题是开发人员认为使用StringBuffer的方法在不使用时本身就是线程安全的。 StringBuffer的问题…

大工20秋计算机组成原理在线作业2,大工14秋《计算机组成原理》在线作业2答案...

大工14秋《计算机组成原理》在线作业2单选题 判断题一、单选题(共 10 道试题&#xff0c;共 50 分。)1. 存储周期是指( )。A. 存储器的读出时间B. 存储器的写入时间C. 存储器进行连续读或写操作所允许的最短时间间隔D. 存储器进行连续读或写操作所允许的最长时间间隔正确答案&a…

css清除浮动

css设计浮动属性的主要目的&#xff0c;是为了实现文本绕排图片的效果。 一.浮动 当浮动一张图片或者其他元素时&#xff0c;浏览器会将浮动元素往上方推&#xff0c;直到它碰到父元素的内边界。后面的元素不再认为浮动元素在文档流中位于它的前面了&#xff0c;因为它就会占…

gitlab搭建配置;ssh配置;

1.centos7上搭建gitlab&#xff0c;过程略&#xff1b; 命令&#xff1a;gitlab-ctl [start] [stop] [restart] [reconfigure] [tail] 查看gtilab日志 [status] 查看gitlab运行状态信息 2.修改默认ip端口&#xff1a; vim /etc/gitlab/gitlab.rb &#xff1b; external_url h…

5月学习总结(Ant-Design,mustache,require.js,grunt)

一、Ant-Design学习 因为Ant-Design是基于React实现的&#xff0c;之前自己也学过一段时间的React&#xff0c;对React还是相对比较熟悉的&#xff0c;在学习Ant-Design也还不算吃力。 最开始是从源码看起&#xff0c;从最简单的Icon组件看的&#xff0c;然后连续看了几个组件就…