在代码中存在超时的情况下如何使用调试器。

我的调试器王国!

因此,您一直忙于编写一个项目,一切顺利,直到出现错误为止。 您可以进入开发人员的工具箱,然后拔出调试器。 很棒–您可以设置断点,可以在发生异常时中断,还可以在运行时检查表达式。 无论等待什么挑战,您都可以肯定,调试器将为您提供帮助!

不幸的是生活并不那么轻松。 许多代码都需要某种超时 -一段时间后发生的事件。 问题在于超时会破坏调试体验。 您坐在那里看着断点,想着“现在为什么x是2而不是1?” of! 超时开始,您将无法继续。 更糟糕的是,JVM本身退出了! 因此,您要经历增加超时,调试和解决问题的过程。 之后,您要么将超时返回到其原始设置,然后必须再次执行相同的繁琐过程,要么将修复意外地提交到源代码树中,从而破坏了测试甚至是生产。 在我看来,这似乎并不理想。

“出于某种原因,这是超时病,不信任任何朋友”

人们引入超时有很多原因。 我在下面列出了一些优点和缺点,而且我敢肯定,您自己还会想到一些。

  • 检查特定时间段内是否响应了异步事件。
  • 避免饿死基于时间的资源,例如线程池。
  • 您的比赛条件需要快速解决。
  • 您正在等待事件发生,并决定对需要多长时间的假设进行硬编码。 (可以在测试中最经常发现)

现在很明显,如果你超时被引入作为一个黑客那么它是一个很好的时间来清洁的童子军的代码。 如果您需要依赖于测试中发生的事件,则应将这些测试视为API的客户端,并能够知道事件何时发生。 这可能涉及注入在事件发生时被调用的模拟程序,或者订阅事件流。 如果您有比赛状况,请解决它! 我知道这很痛苦而且很辛苦,但是您是否真的想让代码库中的定时炸弹准备好在凌晨3点生成支持电话?

管理超时

前面已经说过,我们应该删除超时的不良用法,很显然,超时是完全合法的用法。 它们在事件驱动和异步代码中尤其常见。 能够与他们一起调试仍然会很好。 无论其他因素如何,良好做法都是为了将​​超时标准化为可在运行时设置的配置属性。 这样,当您在本地IDE与生产环境中运行时,可以轻松更改它们。 它还可以帮助管理从不同的硬件设置中遇到的不同性能属性。

将超时从代码中外部化为配置后,您可以检测代码是否在调试器中运行,并在这种情况下将超时设置为明显更长的时间。 这样做的技巧是认识到调试器涉及运行Java代理,该代理会修改运行该程序的程序的命令行参数。 您可以检查这些命令行参数是否包含正确的代理匹配器。 下面的代码片段显示了如何执行此操作,并且已经过测试,可以在Eclipse和Intellij IDEA下工作。

RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
String jvmArguments = runtimeMXBean.getInputArguments().toString();
boolean hasDebuggerAttached = jvmArguments.contains("-agentlib:jdwp");

我可以理解为什么有些人也将其视为黑客,您通过查看自己的命令行参数并围绕它进行调整,从而积极地发现有关您环境的某些信息。 从我的角度来看,我发现这是一种有用的技术。 确实可以更容易地在存在超时的情况下进行调试。

翻译自: https://www.javacodegeeks.com/2014/07/java-debuggers-and-timeouts.html

Java调试器和超时相关推荐

  1. Java调试器–权威的工具列表

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

  2. jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...

    Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指().A.Java调试器B.Java剖析工具C.Jav 更多相关问题 "投资收益"账户属于(). A.损 ...

  3. java调试器jdb_Java调试教程-Java调试器(JDB)概述

    Java调试教程-Java调试器(JDB)概述 (2010-12-24 10:44:44) 标签: 杂谈 摘要 虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点.最重要 ...

  4. modbus调试时间超时_Java调试器和超时

    modbus调试时间超时 在代码中存在超时的情况下如何使用调试器. 我的调试器王国! 因此,您一直忙于编写一个项目,一切顺利,直到出现错误为止. 您可以进入开发人员的工具箱,然后拔出调试器. 很棒–您 ...

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

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

  6. scala本地调试_如何编写自己的Java / Scala调试器

    scala本地调试 在本文中,我们将探讨Java / Scala调试器的编写和工作方式. 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的 ...

  7. 如何编写自己的Java / Scala调试器

    通过这篇文章,我们将探讨Java / Scala调试器的编写和工作方式. 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的钩子来获取其强大 ...

  8. Eclipse 调试器(引用IT168)

    Eclipse 调试器:零距离接触实战技巧 2011年11月25日01:29IT168 字号:T|T 调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码.Eclipse调试器的目标是让程序员能 ...

  9. Eclipse 调试器:零距离接触实战技巧

    Eclipse 调试器:零距离接触实战技巧 id="iframeu2606276_0" src="http://pos.baidu.com/ackm?rdid=26062 ...

最新文章

  1. QT信号与槽——观察者模式——回调函数
  2. Invalid icon file 原因
  3. FormData上传文件同时附带其他参数
  4. 如何做到微信机器人不封号_微信如何做到一键群发所有群
  5. 基于ArcGIS API for JavaScript加载百度各种类型切片地图
  6. 牛客网(剑指offer) 第十五题 反转链表
  7. 如何设置python程序定时执行?
  8. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例
  9. vue 判断对象不为空_Vue 学习笔记(二):实例
  10. The 10th Shandong Provincial Collegiate Programming Contest 2019山东省赛游记+解题报告
  11. matlab 图像的膨胀indilate和腐蚀imerode
  12. csv数据去重 python_数据去重_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
  13. 去除桌面图标下的底色[XP系统]
  14. cartographer的一些结果
  15. 麒麟MIPS:用光盘安装提示Out Of Memory,用U盘安装成功
  16. 用命令行安装IIS(pkgmgr版)
  17. Python中hashlib.sha1()和hashlib.MD5()哈希算法的区别
  18. 怎么把PPT幻灯片里背景图片拿出来
  19. FileZilla Server源码分析--大漠落日5节
  20. jdk下载,安装与卸载,删除注册表

热门文章

  1. springboot获取多个请求参数_springboot获取URL请求参数的多种方式
  2. swagger传递日期类型 json形式
  3. 动态资源Servlet接口
  4. Spring boot(七):Spring boot+ mybatis 多数据源最简解决方案
  5. 编写脚本电脑怎么编写界面_在任何无法理解的情况下,请编写脚本
  6. java ee规范_测试Java EE 8规范
  7. 杜克大学_记录链接:与杜克一起玩
  8. 线程并发库和线程池的作用_线程和并发介绍
  9. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素
  10. 操作方法:Spring Boot和Thymeleaf与Maven