代码之家  ›  专栏  ›  技术社区  ›  Jan Gorzny

Eclipse和其他用于调试并发代码的javaide

  •  7
  • Jan Gorzny  · 技术社区  · 16 年前

    我目前正在研究一些并发代码,其中似乎有一些竞争条件。我正在尝试使用我当前的IDE Eclipse调试代码,但我并不完全满意。具体地说,存在一个变量的争用条件,使得在访问它的方法之一(即“获取”它的方法)上没有断点时,变量设置方法不会完成,并且变量被设置为null。但是,如果我在访问方法上放置一个断点,并按住F8(默认的“跳过”按钮),变量几乎总是设置为正确的(非空)值。

    如果Eclipse没有快速暂停执行,那么是否有其他ide/debugger for Java可以更好地完成这项工作?请注意,我不是在寻找像Java Pathfinder这样的正式验证工具——我不想检查是否存在争用条件,我希望看到它们在我的调试器中展开(如果只是因为它可能很有趣)。

    3 回复  |  直到 16 年前
        1
  •  4
  •   matt b    16 年前

    这让我想问以下问题:是不是Eclipse没有足够快地在所有线程的断点上暂停执行,这样我就可以在没有断点的情况下查看潜在的争用条件,还是发生了其他事情(可能)?

    嗯,不仅如此,调试器的存在也改变了环境,使您无法再现真正运行程序时遇到的相同情况。日食将暂停 一些 当线程到达您的断点时,其他未到达断点的线程可以继续运行并继续更改您的数据。

    用调试器来排除竞争条件是相当困难的-不仅你在大海捞针,而且调试器改变了大海捞针的结构。

    如果能够对代码和处理并发代码所采取的策略进行推理,可能会更好。例如,您是否使用锁保护共享状态?你在同步什么?能够写入变量 foo

        2
  •  9
  •   Bachi    14 年前

    默认情况下,如果一个线程达到断点,Eclipse不会挂起其他线程。但是,您可以在中更改此行为 Window > Preferences > Java > Debug > Default suspend policy for new breakpoints => 'Suspend VM' .

        3
  •  1
  •   nanda    16 年前

    记住,访问/设置变量不能保证一步到位。您可能想使用原子对象来确定。

    如果忘记了,可以为变量设置断点。只需单击变量声明的左侧,就像创建普通断点一样。