7

我正在使用 Spring(3.2.2) + AspectJ (1.7.2) 加载时间编织。使用 Netbeans 7.3 进行开发。

我注意到在调试由 AspectJ 编织的类中的方法时,我不能“跳过”,例如在使用 @Transactional 注释的方法中。

我可以设置断点,但是当我“跳过”时,调试流程会跳转到类的第 1 行,如果再次单击“跳过”,它会跳转到其他类。

尝试在 IntelliJ 12.1.3 中运行它,与 Netbeans 中的问题相同...

在 Eclipse Juno SR2 中调试同一个项目时,“跨步”运行良好,除了方法中的第一行我必须单击两次。

尝试将 -XnoInline 选项添加到 aop.xml,但没有帮助。

我发现了一个类似的问题Eclipse debug stepping with AspectJ但我发现答案不完整:

  1. 什么是问题 ID/链接?
  2. 它适用于哪些版本?
  3. 什么时候修复?
  4. 还有其他解决方法吗?
  5. 为什么它在 Eclipse 中工作,它有解决方法/功能吗?

更新 1

我没有提到 Intellij IDEA 中的调试是通过远程调试。当我直接在 IDE 中调试时,它可以很好地完成...

在 Eclipse 中,我已经尝试过,它在正常和远程调试中都可以正常工作。

在 Netbeans 中,正常/本地或远程调试步骤都很好(逐行) - 仍然是一个问题。

更新 2

我发现调试该代码有什么问题。

Spring 在 3.2.2 版本中改变了@Transactional 方面,用@Around 替换了@Before 和@After 组合。

使用 Spring < 3.2.2 运行我的测试时,调试工作正常。

遗憾的是@Around 使@Transactional 方法几乎无法调试。

这是 AspectJ 中的已知问题(使用@Around)吗?

我添加了与此问题相关的弹簧问题: https ://jira.springsource.org/browse/SPR-10596

更新 3

在 Netbeans 7.4 中,可以使用“Step over expression (Shift+F8)”而不是“Step over (F8)”来单步执行代码。

4

1 回答 1

0

我认为问题实际上在于 IntelliJ 不支持他们的帧重写以删除 @Around 代码帧,就像他们为 @Before/@After 所做的那样。此问题已提交给他们http://youtrack.jetbrains.com/issue/IDEA-119214

于 2014-01-10T14:49:14.300 回答