我有一个Spring MVC项目,我正在尝试使用IntelliJ进行调试。
如果我在Controller代码中设置断点,则调试将在适当的位置停止。该特定行在另一个bean中有更多我自己的代码。我希望能够进入代码。如果我在断点装配后立即“进入”,它将进入Spring的AOP框架代码。
如果我立即触发相同的断点和“智能步入”,它会将我放在源文件的第-1行(如上图所示)。这条线-1是什么意思?如果我再次“聪明地进入”,我最终会在我原来的断点之后排成一行,但是从来没有放在我想要介入的方法中。
我尝试将Spring AOP包放入调试器设置不要进入类。但是,我最终也不得不放入交易类以及其他几个类。最后,我将所有Spring放入列表......以及SLF4J和一些JDBC驱动程序。
除非我使用类似“强制进入”的内容,否则我怎样才能让IntelliJ仅在我的项目源代码中停止?
答案 0 :(得分:38)
目前,没有针对用户代码(例如Visual Studio's 'Just My Code')的总体选项。
具有相同行为的最佳方法是排除特定的代码类或包(可以通过通配符设置类包的过滤器模式),这些类将不会进入'。
这可以在设置/偏好设置中,调试器/步进选项中实现。
答案 1 :(得分:15)
Spring的AOP可能是最严重的罪犯之一。
OP建议他们已经做到了,但是这是您如何禁用单步进入指定类的方法(IntelliJ ULTIMATE 2018.2):
File
-> Settings...
-> Build, Execution, Deployment
-> Debugger
-> Stepping
... Do not step into the classes
-> Add Pattern
-> Enter the filter pattern:
... ... org.springframework.aop.*
请注意,您可以使用通配符禁用整个名称空间-例如,假设您组织的名称空间以com
开头,则可以通过将{ {1}}。
答案 2 :(得分:2)
IntelliJ ULTIMATE 2018.3使用Settings
-> function swap(array, swapy1, swapy2) {
let tmp = array[swapy1];
array[swapy1] = array[swapy2];
array[swapy2] = tmp;
}
function partition(array, lo, hi) {
const pivot = array[hi];
let i = lo - 1;
for (let j = lo; j < hi; j++) {
if (array[j] < pivot) {
if (i !== j) {
i++;
swap(array, i, j)
}
}
}
i++;
swap(array, i, hi);
return i;
}
export default function sort(array, lo, hi) {
if (lo < hi) {
const p = partition(array, lo, hi);
sort(array, lo, p - 1);
sort(array, p + 1, hi);
}
}
->搜索“ Step”,如下所示:
答案 3 :(得分:1)
“ Ultimate 2019.1”中的另一种方法(也可能在以前的版本中):
现在进行调试时,可以右键单击视图“调试器”-“框架”中的类。然后,您可以选择“添加步进过滤器...”,并为该类添加一个新的步进过滤器。当然,您也可以在这里使用占位符“ *”等来更改新的步进滤波器...
答案 4 :(得分:0)
完成上述更改后,请停止您的应用程序,然后再次重新进入调试模式才能生效。