反应性编程趋势后,我们的代码越来越异步。
早些时候java8介绍了CompletableFuture(采用Guava’s ListenableFuture),通过Akka, Ratpack, Reactor, RxJava, Vert.x以及其它库实现反应流。虽然反应性编程能帮助我们构建高效的应用程序,但是它们同时也是难以编写、调试。
如下方示例:
如果我们将堆栈根据一个观察点看起来会这样:
我们通过调用CompletableFuture.supplyAsync (S2_Creating.supplyAsync)来看ForkJoinPool.runWorker(一个执行者服务异步运行代码)和所有的内部,这使得该数据流难以理解并很难导航到相关连接到。
IntelliJ IDEA 2017.1带有一个新的调试器(捕获),这改变了堆栈跟踪相关各部分用异步代码执行(接收器)与相应地区的堆栈跟踪捕获的异步代码传递(发送方)。
IntelliJ IDEA的该特性只需要知道将确切的签名方法用于发送和接收数据(异步代码)。
以下是IntelliJ IDEA在设置中如何配置该调试器(Settings > Build, Execution, Deployment > Debugger > Capture)
一旦所有的需求被满足后,IntelliJ IDEA将显示堆栈跟踪调整:
如果要更好的清晰度,可以设置过滤掉库框架:
堆栈跟踪显示局部变量替换的部分(虽然没有对象字段):
需要知道的是该特性在执行期间会收集额外的数据从而可能导致性能问题。
作者信息
原文作者:Andrey Cheptsov
原文链接:https://dzone.com/articles/intellij-idea-20171-eap-extends-debugger-with-asyn
翻译自Maxleap团队_云服务研发成员:Sunny Zhang
网友评论