• kozyatinskiy's avatar
    [debugger] tuned StepNext and StepOut at return position · e27d18c9
    kozyatinskiy authored
    Proposed behaviour:
    - StepNext at return position go into next function call (no changes with current behavior, but implemented in v8::Debug instead of hack on inspector side);
    - StepOut at return position go into next non-current function call.
    
    We need this to have better stepping in cases with native functions, blackboxed functions and/or different embedder calls (e.g. event listeners).
    
    New behavior could be illustrated with two examples (for more see stepping-with-natives-and-frameworks test):
    - let's assume that we've blackboxed callAll function, this function just takes its arguments and call one after another:
    var foo = () => 1;
    callAll(foo, foo, () => 2);
    If we break inside of first call of function foo. Then on..
    ..StepNext - we're able to reach second call of function foo,
    ..StepOut - we're able to reach () => 2 call.
    
    - let's consider case with native function:
    [1,2,3].map(x => x * 2)
    If we break inside of first callback call, then with StepNext we can iterate through all calls of callback, with StepOut we go to next statement after .map call.
    
    Implementation details:
    - when we request break we schedule step-in function call for any step action at return position and for step-in at any position,
    - when we request StepOut at return position - we mark current function as needed-to-be-ignored inside of PrepareStepIn(function) call,
    - when we request StepOut at not return position - we set break at return position and ask debugger to just repeat last step action on next stepping-related break.
    
    Design doc: https://docs.google.com/document/d/1ihXHOIhP_q-fJCA0e2EiXz_Zr3B08KMjaPifcaqZ60Q/edit
    
    BUG=v8:6118,chromium:583193
    R=dgozman@chromium.org,yangguo@chromium.org
    
    Review-Url: https://codereview.chromium.org/2758483002
    Cr-Commit-Position: refs/heads/master@{#44028}
    e27d18c9
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...