diff options
author | Hans Bolinder <[email protected]> | 2018-02-05 09:03:36 +0100 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2018-02-05 14:45:37 +0100 |
commit | dc4b576b334cfff188b15740a38e7b2b1d5ab004 (patch) | |
tree | 285ff2efc559af66518d994e0d428cd43132bb5f /lib/debugger | |
parent | 0f42a14f6c201ac1d8d02abcd24f9d06e0d17545 (diff) | |
download | otp-dc4b576b334cfff188b15740a38e7b2b1d5ab004.tar.gz otp-dc4b576b334cfff188b15740a38e7b2b1d5ab004.tar.bz2 otp-dc4b576b334cfff188b15740a38e7b2b1d5ab004.zip |
debugger: Do not try to restore stacktrace
Diffstat (limited to 'lib/debugger')
-rw-r--r-- | lib/debugger/src/dbg_debugged.erl | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/lib/debugger/src/dbg_debugged.erl b/lib/debugger/src/dbg_debugged.erl index e142af4ae0..0e1de33310 100644 --- a/lib/debugger/src/dbg_debugged.erl +++ b/lib/debugger/src/dbg_debugged.erl @@ -31,32 +31,25 @@ %% Called via the error handler. %%-------------------------------------------------------------------- eval(Mod, Func, Args) -> - SaveStacktrace = erlang:get_stacktrace(), Meta = dbg_ieval:eval(Mod, Func, Args), Mref = erlang:monitor(process, Meta), - msg_loop(Meta, Mref, SaveStacktrace). + msg_loop(Meta, Mref). %%==================================================================== %% Internal functions %%==================================================================== -msg_loop(Meta, Mref, SaveStacktrace) -> +msg_loop(Meta, Mref) -> receive %% Evaluated function has returned a value {sys, Meta, {ready, Val}} -> erlang:demonitor(Mref, [flush]), - - %% Restore original stacktrace and return the value - try erlang:raise(throw, stack, SaveStacktrace) - catch - throw:stack -> - case Val of - {dbg_apply,M,F,A} -> - apply(M, F, A); - _ -> - Val - end + case Val of + {dbg_apply,M,F,A} -> + apply(M, F, A); + _ -> + Val end; %% Evaluated function raised an (uncaught) exception @@ -74,24 +67,18 @@ msg_loop(Meta, Mref, SaveStacktrace) -> Meta ! {self(), rec_acked}, ok end, - msg_loop(Meta, Mref, SaveStacktrace); + msg_loop(Meta, Mref); %% Meta needs something evaluated within context of real process {sys, Meta, {command,Command}} -> Reply = handle_command(Command), Meta ! {sys, self(), Reply}, - msg_loop(Meta, Mref, SaveStacktrace); + msg_loop(Meta, Mref); %% Meta has terminated %% Must be due to int:stop() (or -heaven forbid- a debugger bug) {'DOWN', Mref, _, _, Reason} -> - - %% Restore original stacktrace and return a dummy value - try erlang:raise(throw, stack, SaveStacktrace) - catch - throw:stack -> - {interpreter_terminated, Reason} - end + {interpreter_terminated, Reason} end. handle_command(Command) -> |