【问题标题】:Is there a way to trace who invoked onNext() on a Subject, in RxJava(2)?有没有办法在 RxJava(2) 中跟踪谁在主题上调用了 onNext()?
【发布时间】:2019-07-16 01:33:05
【问题描述】:

我正在使用 RxJava2 开发一个 Android 应用程序(不过没关系),并且在一些单例中有一些 PublishProcessors。

在整个项目中,有很多.onNext() 调用这些PublishProcessors。

现在为了调试,我需要知道,在每次调用 .onNext() 时,我的项目中的哪一行调用了这个 .onNext()

在 RxJava(2) 中有没有一种方法可以实现这一点?

【问题讨论】:

  • 不是暴露处理器实例,而是暴露一些对象,您可以在其中拦截对 onNext 的调用,然后再进入处理器的 onNext。
  • 然后我将不得不修改所有这些调用,我也可以将日志添加到所有这些调用中......我正在寻找一种更简单的方法

标签: android kotlin rx-java rx-java2


【解决方案1】:

啊,感谢@PhanVanLinh,我找到了适合我的解决方案。

(其实和 RxJava 几乎没什么关系……)

您只需要使用Thread.currentThread.stackTrace 打印堆栈跟踪并将其打印到您自己在doOnNext() 内的字符串中,但请记住在之前 .observeOn() 这样做,这样线程就不会切换, 必须停留在调用.onNext() 的原始线程,否则将无法获得有意义的信息。

然后你就会知道哪一行调用了.onNext()

【讨论】:

  • 这有助于跟踪调用onNext的线程无法跟踪调用的代码中的哪一行?
  • @PhanVanLinh 你可以从 StackTrace 对象中获取行号
【解决方案2】:

我认为您可以在Debug 菜单中使用Frames 选项卡。
比如本例中MainActivity第18行触发onNext

【讨论】:

  • 嗯,如果它不涉及线程更改(这对我的情况来说可能没问题),这将起作用。但是我真的有很多电话给他们,你知道如何在不使用调试器的情况下记录它吗?
  • 对不起,对于日志,目前我不知道任何解决方案。我只是搜索并看到google.com/…。也许你可以试试。如果您找到了解决方案,请发布答案。它可能会帮助很多人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
相关资源
最近更新 更多