学校网站如何做,wordpress 栏目列表,seo是什么推广,能源网站开发在代码中存在超时的情况下如何使用调试器。 我的调试器王国#xff01; 因此#xff0c;您一直忙于编写一个项目#xff0c;一切顺利#xff0c;直到出现错误为止。 您可以进入开发人员的工具箱#xff0c;然后拔出调试器。 很棒–您可以设置断点#xff0c;可以在发生异… 在代码中存在超时的情况下如何使用调试器。 我的调试器王国 因此您一直忙于编写一个项目一切顺利直到出现错误为止。 您可以进入开发人员的工具箱然后拔出调试器。 很棒–您可以设置断点可以在发生异常时中断还可以在运行时检查表达式。 无论等待什么挑战您都可以肯定调试器将为您提供帮助 不幸的是生活并不那么轻松。 许多代码都需要某种超时 -一段时间后发生的事件。 问题在于超时会破坏调试体验。 您坐在那里看着断点想着“现在为什么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