Stepping issues
qgindi opened this issue · 2 comments
Issues in steppers.cpp.
-
Always steps into cast operators.
Fix: Ing_operatorMethodNames
addop_Implicit
andop_Explicit
. -
If stopped in property code (eg breakpoint), next step-over or step-in behaves like step-out (unless disabled step filtering).
Fix: inmethodShouldBeFltered
lambda add as the first statement:
if (reason != CorDebugStepReason::STEP_CALL) return false;
-
If function arguments contains > 1 call to functions, a step-in behaves like step-over (does not step into the function; also into third+ argument functions).
4 (not important): If disabled Just My Code, need 2 step-in for a call to a function with [DebuggerStepThrough]
.
Repro code for 3 and 4:
C.M3(C.P1, C.P2); //does not step into M3
C.M4(C.M1(), C.M2(), C.M1()); //does not step into M4 and the last M1
C.M3(C.M5(C.P1), C.M5(C.P1)); //does not step into M3 and the last M5
C.M6(); //(4) need 2 step-in if disabled JMC
C.M3(C.M6(), C.M6()); //(4) need 2 step-in if disabled JMC
;
class C {
public static int P1 => 1;
public static int P2 => 2;
public static int M1() => 1;
public static int M2() => 2;
public static void M3(int a, int b) {
;
}
public static void M4(int a, int b, int c = 0, int d = 0) {
;
}
public static int M5(int k) => k + 1;
[DebuggerStepThrough]
public static int M6() { return 1; }
}
- If there is
using
statement, a step-over may behave like step-in.
Repro:
using var c = new C();
;
//here always steps into Dispose
class C : IDisposable {
public void Dispose() {
;
}
}
- If there is
using
statement, a step-in may behave like step-over.
Repro:
C.M();
;
class C : IDisposable {
public void Dispose() {
;
}
public static void M() {
using var c = new C();
;
} //here never steps into Dispose
}
Thanks for reporting this! We'll take a look.
This should be fixed in latest release. Feel free to reopen if you see any more related issues.