我正在使用 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但我发现答案不完整:
- 什么是问题 ID/链接?
- 它适用于哪些版本?
- 什么时候修复?
- 还有其他解决方法吗?
- 为什么它在 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)”来单步执行代码。