diff options
Diffstat (limited to 'lib/debugger')
-rw-r--r-- | lib/debugger/doc/src/Makefile | 6 | ||||
-rw-r--r-- | lib/debugger/doc/src/debugger.xml | 12 | ||||
-rw-r--r-- | lib/debugger/doc/src/i.xml | 64 | ||||
-rw-r--r-- | lib/debugger/doc/src/int.xml | 64 | ||||
-rw-r--r-- | lib/debugger/doc/src/notes.xml | 32 | ||||
-rw-r--r-- | lib/debugger/src/dbg_debugged.erl | 40 | ||||
-rw-r--r-- | lib/debugger/src/dbg_icmd.erl | 4 | ||||
-rw-r--r-- | lib/debugger/src/dbg_ieval.erl | 7 | ||||
-rw-r--r-- | lib/debugger/src/dbg_wx_mon.erl | 6 | ||||
-rw-r--r-- | lib/debugger/src/dbg_wx_trace.erl | 10 | ||||
-rw-r--r-- | lib/debugger/src/dbg_wx_win.erl | 4 | ||||
-rw-r--r-- | lib/debugger/src/debugger.app.src | 2 | ||||
-rw-r--r-- | lib/debugger/src/i.erl | 2 | ||||
-rw-r--r-- | lib/debugger/test/guard_SUITE.erl | 7 | ||||
-rw-r--r-- | lib/debugger/test/int_eval_SUITE.erl | 11 | ||||
-rw-r--r-- | lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl | 6 | ||||
-rw-r--r-- | lib/debugger/vsn.mk | 2 |
17 files changed, 153 insertions, 126 deletions
diff --git a/lib/debugger/doc/src/Makefile b/lib/debugger/doc/src/Makefile index cc0b8861d3..49b5a4be57 100644 --- a/lib/debugger/doc/src/Makefile +++ b/lib/debugger/doc/src/Makefile @@ -1,7 +1,7 @@ # # %CopyrightBegin% # -# Copyright Ericsson AB 1997-2016. All Rights Reserved. +# Copyright Ericsson AB 1997-2018. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -99,6 +99,7 @@ gifs: $(GIF_FILES:%=$(HTMLDIR)/%) clean clean_docs: rm -rf $(HTMLDIR)/* + rm -rf $(XMLDIR) rm -f $(MAN3DIR)/* rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) rm -f errs core *~ @@ -113,8 +114,7 @@ include $(ERL_TOP)/make/otp_release_targets.mk release_docs_spec: docs $(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf" $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf" - $(INSTALL_DIR) "$(RELSYSDIR)/doc/html" - ($(CP) -rf $(HTMLDIR) "$(RELSYSDIR)/doc") + $(INSTALL_DIR_DATA) $(HTMLDIR) "$(RELSYSDIR)/doc/html" $(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)" $(INSTALL_DIR) "$(RELEASE_PATH)/man/man3" $(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3" diff --git a/lib/debugger/doc/src/debugger.xml b/lib/debugger/doc/src/debugger.xml index 1ecdbcd064..77285095e7 100644 --- a/lib/debugger/doc/src/debugger.xml +++ b/lib/debugger/doc/src/debugger.xml @@ -28,7 +28,7 @@ <date></date> <rev></rev> </header> - <module>debugger</module> + <module since="">debugger</module> <modulesummary>Erlang Debugger.</modulesummary> <description> <p>Erlang Debugger for debugging and testing of Erlang programs.</p> @@ -36,10 +36,10 @@ <funcs> <func> - <name>start()</name> - <name>start(File)</name> - <name>start(Mode)</name> - <name>start(Mode, File)</name> + <name since="">start()</name> + <name since="">start(File)</name> + <name since="">start(Mode)</name> + <name since="">start(Mode, File)</name> <fsummary>Start Debugger.</fsummary> <type> <v>Mode = local | global</v> @@ -60,7 +60,7 @@ </func> <func> - <name>quick(Module, Name, Args)</name> + <name since="">quick(Module, Name, Args)</name> <fsummary>Debug a process.</fsummary> <type> <v>Module = Name = atom()</v> diff --git a/lib/debugger/doc/src/i.xml b/lib/debugger/doc/src/i.xml index 628b91e9e4..06b0eb876a 100644 --- a/lib/debugger/doc/src/i.xml +++ b/lib/debugger/doc/src/i.xml @@ -28,7 +28,7 @@ <date></date> <rev></rev> </header> - <module>i</module> + <module since="">i</module> <modulesummary>Debugger/Interpreter Interface.</modulesummary> <description> <p>The <c>i</c> module provides short forms for some of @@ -51,7 +51,7 @@ <funcs> <func> - <name>im() -> pid()</name> + <name since="">im() -> pid()</name> <fsummary>Start a graphical monitor.</fsummary> <desc> <p>Starts a new graphical monitor. This is the Monitor window, @@ -63,10 +63,10 @@ </func> <func> - <name>ii(AbsModules) -> ok</name> - <name>ii(AbsModule) -> {module, Module} | error</name> - <name>ini(AbsModules) -> ok</name> - <name>ini(AbsModule) -> {module, Module} | error</name> + <name since="">ii(AbsModules) -> ok</name> + <name since="">ii(AbsModule) -> {module, Module} | error</name> + <name since="">ini(AbsModules) -> ok</name> + <name since="">ini(AbsModule) -> {module, Module} | error</name> <fsummary>Interpret a module.</fsummary> <type> <v>AbsModules = [AbsModule]</v> @@ -84,8 +84,8 @@ </func> <func> - <name>iq(AbsModule) -> ok</name> - <name>inq(AbsModule) -> ok</name> + <name since="">iq(AbsModule) -> ok</name> + <name since="">inq(AbsModule) -> ok</name> <fsummary>Stop interpreting a module.</fsummary> <type> <v>AbsModule = Module | File</v> @@ -100,7 +100,7 @@ </func> <func> - <name>il() -> ok</name> + <name since="">il() -> ok</name> <fsummary>Make a printout of all interpreted modules</fsummary> <desc> <p>Makes a printout of all interpreted modules. @@ -110,7 +110,7 @@ </func> <func> - <name>ip() -> ok</name> + <name since="">ip() -> ok</name> <fsummary>Print the current status of all interpreted processes.</fsummary> <desc> @@ -119,7 +119,7 @@ </func> <func> - <name>ic() -> ok</name> + <name since="">ic() -> ok</name> <fsummary>Clear information about processes executing interpreted code.</fsummary> <desc> @@ -129,8 +129,8 @@ </func> <func> - <name>iaa(Flags) -> true</name> - <name>iaa(Flags, Function) -> true</name> + <name since="">iaa(Flags) -> true</name> + <name since="">iaa(Flags, Function) -> true</name> <fsummary>Set when and how to attach to a process.</fsummary> <type> <v>Flags = [init | break | exit]</v> @@ -148,7 +148,7 @@ </func> <func> - <name>ist(Flag) -> true</name> + <name since="">ist(Flag) -> true</name> <fsummary>Set how to save call frames.</fsummary> <type> <v>Flag = all | no_tail | false</v> @@ -160,7 +160,7 @@ </func> <func> - <name>ia(Pid) -> ok | no_proc</name> + <name since="">ia(Pid) -> ok | no_proc</name> <fsummary>Attache to a process.</fsummary> <type> <v>Pid = pid()</v> @@ -172,7 +172,7 @@ </func> <func> - <name>ia(X,Y,Z) -> ok | no_proc</name> + <name since="">ia(X,Y,Z) -> ok | no_proc</name> <fsummary>Attache to a process.</fsummary> <type> <v>X = Y = Z = int()</v> @@ -184,7 +184,7 @@ </func> <func> - <name>ia(Pid, Function) -> ok | no_proc</name> + <name since="">ia(Pid, Function) -> ok | no_proc</name> <fsummary>Attache to a process.</fsummary> <type> <v>Pid = pid()</v> @@ -199,7 +199,7 @@ </func> <func> - <name>ia(X,Y,Z, Function) -> ok | no_proc</name> + <name since="">ia(X,Y,Z, Function) -> ok | no_proc</name> <fsummary>Attache to a process.</fsummary> <type> <v>X = Y = Z = int()</v> @@ -217,7 +217,7 @@ </func> <func> - <name>ib(Module, Line) -> ok | {error, break_exists}</name> + <name since="">ib(Module, Line) -> ok | {error, break_exists}</name> <fsummary>Create a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -229,7 +229,7 @@ </func> <func> - <name>ib(Module, Name, Arity) -> ok | {error, function_not_found} + <name since="">ib(Module, Name, Arity) -> ok | {error, function_not_found} </name> <fsummary>Create breakpoints in the specified function.</fsummary> <type> @@ -243,7 +243,7 @@ </func> <func> - <name>ir() -> ok</name> + <name since="">ir() -> ok</name> <fsummary>Delete all breakpoints.</fsummary> <desc> <p>Deletes all breakpoints.</p> @@ -251,7 +251,7 @@ </func> <func> - <name>ir(Module) -> ok</name> + <name since="">ir(Module) -> ok</name> <fsummary>Delete all breakpoints in a module.</fsummary> <type> <v>Module = atom()</v> @@ -262,7 +262,7 @@ </func> <func> - <name>ir(Module, Line) -> ok</name> + <name since="">ir(Module, Line) -> ok</name> <fsummary>Delete a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -274,7 +274,7 @@ </func> <func> - <name>ir(Module, Name, Arity) -> ok | {error, function_not_found} + <name since="">ir(Module, Name, Arity) -> ok | {error, function_not_found} </name> <fsummary>Delete breakpoints from the specified function.</fsummary> <type> @@ -288,7 +288,7 @@ </func> <func> - <name>ibd(Module, Line) -> ok</name> + <name since="">ibd(Module, Line) -> ok</name> <fsummary>Make a breakpoint inactive.</fsummary> <type> <v>Module = atom()</v> @@ -300,7 +300,7 @@ </func> <func> - <name>ibe(Module, Line) -> ok</name> + <name since="">ibe(Module, Line) -> ok</name> <fsummary>Make a breakpoint active.</fsummary> <type> <v>Module = atom()</v> @@ -312,7 +312,7 @@ </func> <func> - <name>iba(Module, Line, Action) -> ok</name> + <name since="">iba(Module, Line, Action) -> ok</name> <fsummary>Set the trigger action of a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -326,7 +326,7 @@ </func> <func> - <name>ibc(Module, Line, Function) -> ok</name> + <name since="">ibc(Module, Line, Function) -> ok</name> <fsummary>Set the conditional test of a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -348,7 +348,7 @@ </func> <func> - <name>ipb() -> ok</name> + <name since="">ipb() -> ok</name> <fsummary>Print all existing breakpoints.</fsummary> <desc> <p>Prints all existing breakpoints.</p> @@ -356,7 +356,7 @@ </func> <func> - <name>ipb(Module) -> ok</name> + <name since="">ipb(Module) -> ok</name> <fsummary>Print all existing breakpoints in a module.</fsummary> <type> <v>Module = atom()</v> @@ -367,7 +367,7 @@ </func> <func> - <name>iv() -> atom()</name> + <name since="">iv() -> atom()</name> <fsummary>Return the current version number of the interpreter. </fsummary> <desc> @@ -377,7 +377,7 @@ </func> <func> - <name>help() -> ok</name> + <name since="">help() -> ok</name> <fsummary>Print help text.</fsummary> <desc> <p>Prints help text.</p> diff --git a/lib/debugger/doc/src/int.xml b/lib/debugger/doc/src/int.xml index 31e9dfe923..a0078714e6 100644 --- a/lib/debugger/doc/src/int.xml +++ b/lib/debugger/doc/src/int.xml @@ -28,7 +28,7 @@ <date></date> <rev></rev> </header> - <module>int</module> + <module since="">int</module> <modulesummary>Interpreter Interface.</modulesummary> <description> <p>The Erlang interpreter provides mechanisms for breakpoints and @@ -94,10 +94,10 @@ <funcs> <func> - <name>i(AbsModule) -> {module,Module} | error</name> - <name>i(AbsModules) -> ok</name> - <name>ni(AbsModule) -> {module,Module} | error</name> - <name>ni(AbsModules) -> ok</name> + <name since="">i(AbsModule) -> {module,Module} | error</name> + <name since="">i(AbsModules) -> ok</name> + <name since="">ni(AbsModule) -> {module,Module} | error</name> + <name since="">ni(AbsModules) -> ok</name> <fsummary>Interpret a module.</fsummary> <type> <v>AbsModules = [AbsModule]</v> @@ -144,8 +144,8 @@ </func> <func> - <name>n(AbsModule) -> ok</name> - <name>nn(AbsModule) -> ok</name> + <name since="">n(AbsModule) -> ok</name> + <name since="">nn(AbsModule) -> ok</name> <fsummary>Stop interpreting a module.</fsummary> <type> <v>AbsModule = Module | File | [Module | File]</v> @@ -163,7 +163,7 @@ </func> <func> - <name>interpreted() -> [Module]</name> + <name since="">interpreted() -> [Module]</name> <fsummary>Get all interpreted modules.</fsummary> <type> <v>Module = atom()</v> @@ -174,7 +174,7 @@ </func> <func> - <name>file(Module) -> File | {error,not_loaded}</name> + <name since="">file(Module) -> File | {error,not_loaded}</name> <fsummary>Get the filename for an interpreted module.</fsummary> <type> <v>Module = atom()</v> @@ -187,7 +187,7 @@ </func> <func> - <name>interpretable(AbsModule) -> true | {error,Reason}</name> + <name since="">interpretable(AbsModule) -> true | {error,Reason}</name> <fsummary>Check if a module can be interpreted.</fsummary> <type> <v>AbsModule = Module | File</v> @@ -255,9 +255,9 @@ </func> <func> - <name>auto_attach() -> false | {Flags,Function}</name> - <name>auto_attach(false)</name> - <name>auto_attach(Flags, Function)</name> + <name since="">auto_attach() -> false | {Flags,Function}</name> + <name since="">auto_attach(false)</name> + <name since="">auto_attach(Flags, Function)</name> <fsummary>Get and set when and how to attach to a process.</fsummary> <type> <v>Flags = [init | break | exit]</v> @@ -290,8 +290,8 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>stack_trace() -> Flag</name> - <name>stack_trace(Flag)</name> + <name since="">stack_trace() -> Flag</name> + <name since="">stack_trace(Flag)</name> <fsummary>Get and set if and how to save call frames.</fsummary> <type> <v>Flag = all | no_tail | false</v> @@ -322,7 +322,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>break(Module, Line) -> ok | {error,break_exists}</name> + <name since="">break(Module, Line) -> ok | {error,break_exists}</name> <fsummary>Create a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -334,7 +334,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>delete_break(Module, Line) -> ok</name> + <name since="">delete_break(Module, Line) -> ok</name> <fsummary>Delete a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -346,7 +346,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>break_in(Module, Name, Arity) -> ok + <name since="">break_in(Module, Name, Arity) -> ok | {error,function_not_found}</name> <fsummary>Create breakpoints in the specified function.</fsummary> <type> @@ -360,7 +360,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>del_break_in(Module, Name, Arity) -> ok + <name since="">del_break_in(Module, Name, Arity) -> ok | {error,function_not_found}</name> <fsummary>Delete breakpoints from the specified function.</fsummary> <type> @@ -374,8 +374,8 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>no_break() -> ok</name> - <name>no_break(Module) -> ok</name> + <name since="">no_break() -> ok</name> + <name since="">no_break(Module) -> ok</name> <fsummary>Delete all breakpoints.</fsummary> <desc> <p>Deletes all breakpoints, or all breakpoints in <c>Module</c>.</p> @@ -383,7 +383,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>disable_break(Module, Line) -> ok</name> + <name since="">disable_break(Module, Line) -> ok</name> <fsummary>Make a breakpoint inactive.</fsummary> <type> <v>Module = atom()</v> @@ -395,7 +395,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>enable_break(Module, Line) -> ok</name> + <name since="">enable_break(Module, Line) -> ok</name> <fsummary>Make a breakpoint active.</fsummary> <type> <v>Module = atom()</v> @@ -407,7 +407,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>action_at_break(Module, Line, Action) -> ok</name> + <name since="">action_at_break(Module, Line, Action) -> ok</name> <fsummary>Set the trigger action of a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -421,7 +421,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>test_at_break(Module, Line, Function) -> ok</name> + <name since="">test_at_break(Module, Line, Function) -> ok</name> <fsummary>Set the conditional test of a breakpoint.</fsummary> <type> <v>Module = atom()</v> @@ -438,7 +438,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>get_binding(Var, Bindings) -> {value,Value} | unbound</name> + <name since="">get_binding(Var, Bindings) -> {value,Value} | unbound</name> <fsummary>Retrieve a variable binding.</fsummary> <type> <v>Var = atom()</v> @@ -453,8 +453,8 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>all_breaks() -> [Break]</name> - <name>all_breaks(Module) -> [Break]</name> + <name since="">all_breaks() -> [Break]</name> + <name since="">all_breaks(Module) -> [Break]</name> <fsummary>Get all breakpoints.</fsummary> <type> <v>Break = {Point,Options}</v> @@ -474,7 +474,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>snapshot() -> [Snapshot]</name> + <name since="">snapshot() -> [Snapshot]</name> <fsummary>Get information about all processes executing interpreted code.</fsummary> <type> @@ -519,7 +519,7 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>clear() -> ok</name> + <name since="">clear() -> ok</name> <fsummary>Clear information about processes executing interpreted code.</fsummary> <desc> @@ -529,8 +529,8 @@ spawn(Module, Name, [Pid | Args])</pre> </func> <func> - <name>continue(Pid) -> ok | {error,not_interpreted}</name> - <name>continue(X,Y,Z) -> ok | {error,not_interpreted}</name> + <name since="">continue(Pid) -> ok | {error,not_interpreted}</name> + <name since="">continue(X,Y,Z) -> ok | {error,not_interpreted}</name> <fsummary>Resume process execution.</fsummary> <type> <v>Pid = pid()</v> diff --git a/lib/debugger/doc/src/notes.xml b/lib/debugger/doc/src/notes.xml index e71746e30d..395b69973d 100644 --- a/lib/debugger/doc/src/notes.xml +++ b/lib/debugger/doc/src/notes.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>2004</year><year>2017</year> + <year>2004</year><year>2018</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -33,6 +33,36 @@ <p>This document describes the changes made to the Debugger application.</p> +<section><title>Debugger 4.2.6</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + Improved documentation.</p> + <p> + Own Id: OTP-15190</p> + </item> + </list> + </section> + +</section> + +<section><title>Debugger 4.2.5</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> Fix a bug where calling a fun inside a binary would + crash the Debugger. </p> + <p> + Own Id: OTP-14957 Aux Id: PR-1741 </p> + </item> + </list> + </section> + +</section> + <section><title>Debugger 4.2.4</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/debugger/src/dbg_debugged.erl b/lib/debugger/src/dbg_debugged.erl index e142af4ae0..5296b8d892 100644 --- a/lib/debugger/src/dbg_debugged.erl +++ b/lib/debugger/src/dbg_debugged.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1998-2016. All Rights Reserved. +%% Copyright Ericsson AB 1998-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -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,32 +67,25 @@ 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) -> try reply(Command) - catch Class:Reason -> - Stacktrace = stacktrace_f(erlang:get_stacktrace()), - {exception,{Class,Reason,Stacktrace}} + catch Class:Reason:Stacktrace -> + {exception,{Class,Reason,stacktrace_f(Stacktrace)}} end. reply({apply,M,F,As}) -> diff --git a/lib/debugger/src/dbg_icmd.erl b/lib/debugger/src/dbg_icmd.erl index 4cd3dce670..ac901c5469 100644 --- a/lib/debugger/src/dbg_icmd.erl +++ b/lib/debugger/src/dbg_icmd.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1998-2017. All Rights Reserved. +%% Copyright Ericsson AB 1998-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -467,7 +467,7 @@ mark_break(Cm, LineNo, Le) -> parse_cmd(Cmd, LineNo) -> {ok,Tokens,_} = erl_scan:string(Cmd, LineNo, [text]), - {ok,Forms,Bs} = lib:extended_parse_exprs(Tokens), + {ok,Forms,Bs} = erl_eval:extended_parse_exprs(Tokens), {Forms, Bs}. %%==================================================================== diff --git a/lib/debugger/src/dbg_ieval.erl b/lib/debugger/src/dbg_ieval.erl index 8009d62629..b6703d5d9e 100644 --- a/lib/debugger/src/dbg_ieval.erl +++ b/lib/debugger/src/dbg_ieval.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1998-2017. All Rights Reserved. +%% Copyright Ericsson AB 1998-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -924,8 +924,7 @@ expr({dbg,Line,raise,As0}, Bs0, #ieval{level=Le}=Ieval0) -> trace(return, {Le,Error}), {value,Error,Bs} catch - _:_ -> - Stk = erlang:get_stacktrace(), %Possibly truncated. + _:_:Stk -> %Possibly truncated. StkFun = fun(_) -> Stk end, do_exception(Class, Reason, StkFun, Bs, Ieval) end; @@ -1034,7 +1033,7 @@ expr({send,Line,To0,Msg0}, Bs0, Ieval0) -> %% Binary expr({bin,Line,Fs}, Bs0, Ieval0) -> - Ieval = Ieval0#ieval{line=Line}, + Ieval = Ieval0#ieval{line=Line,top=false}, try eval_bits:expr_grp(Fs, Bs0, fun (E, B) -> expr(E, B, Ieval) end, diff --git a/lib/debugger/src/dbg_wx_mon.erl b/lib/debugger/src/dbg_wx_mon.erl index a32a6894b8..08b20d3f69 100644 --- a/lib/debugger/src/dbg_wx_mon.erl +++ b/lib/debugger/src/dbg_wx_mon.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2016. All Rights Reserved. +%% Copyright Ericsson AB 2008-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -119,9 +119,9 @@ init(CallingPid, Mode, SFile) -> init2(CallingPid, Mode, SFile, GS) catch exit:stop -> stop; - Error:Reason -> + Error:Reason:Stacktrace -> io:format("~p: Crashed {~p,~p} in~n ~p", - [?MODULE, Error, Reason, erlang:get_stacktrace()]) + [?MODULE, Error, Reason, Stacktrace]) end end. diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl index b1e0e03b4c..25f32ca7e7 100644 --- a/lib/debugger/src/dbg_wx_trace.erl +++ b/lib/debugger/src/dbg_wx_trace.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2017. All Rights Reserved. +%% Copyright Ericsson AB 2008-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -95,9 +95,9 @@ start(Pid, Env, Parent, TraceWin, BackTrace, Strings) -> catch _:stop -> exit(stop); - E:R -> + E:R:S -> io:format("TraceWin Crashed ~p~n",[E]), - io:format(" ~p in ~p~n",[R, erlang:get_stacktrace()]), + io:format(" ~p in ~p~n",[R, S]), exit(R) end; error -> @@ -518,8 +518,8 @@ gui_cmd({user_command, Cmd}, State) -> gui_cmd({edit, {Var, Value}}, State) -> Window = dbg_wx_trace_win:get_window(State#state.win), Val = case State#state.strings of - [] -> dbg_wx_win:to_string("~999999lp",[Value]); - [str_on] -> dbg_wx_win:to_string("~999999tp",[Value]) + [] -> dbg_wx_win:to_string("~0lp",[Value]); + [str_on] -> dbg_wx_win:to_string("~0tp",[Value]) end, case dbg_wx_win:entry(Window, "Edit variable", Var, {term, Val}) of cancel -> diff --git a/lib/debugger/src/dbg_wx_win.erl b/lib/debugger/src/dbg_wx_win.erl index f1298154ab..4391ad1598 100644 --- a/lib/debugger/src/dbg_wx_win.erl +++ b/lib/debugger/src/dbg_wx_win.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2017. All Rights Reserved. +%% Copyright Ericsson AB 2008-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -275,7 +275,7 @@ entry(Parent, Title, Prompt, {Type, Value}) -> verify(Type, Str) -> case erl_scan:string(Str, 1, [text]) of {ok, Tokens, _EndLine} when Type==term -> - case lib:extended_parse_term(Tokens++[{dot, erl_anno:new(1)}]) of + case erl_eval:extended_parse_term(Tokens++[{dot, erl_anno:new(1)}]) of {ok, Value} -> {edit, Value}; _Error -> ignore diff --git a/lib/debugger/src/debugger.app.src b/lib/debugger/src/debugger.app.src index 37a41c1a56..c8a8b0fd43 100644 --- a/lib/debugger/src/debugger.app.src +++ b/lib/debugger/src/debugger.app.src @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2015. All Rights Reserved. +%% Copyright Ericsson AB 1997-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. diff --git a/lib/debugger/src/i.erl b/lib/debugger/src/i.erl index 62ce8d0e20..853fa529a0 100644 --- a/lib/debugger/src/i.erl +++ b/lib/debugger/src/i.erl @@ -30,7 +30,7 @@ -import(lists, [sort/1,foreach/2]). iv() -> - Vsn = string:substr(filename:basename(code:lib_dir(debugger)), 10), + Vsn = string:slice(filename:basename(code:lib_dir(debugger)), 9), list_to_atom(Vsn). %% ------------------------------------------- diff --git a/lib/debugger/test/guard_SUITE.erl b/lib/debugger/test/guard_SUITE.erl index f7874f79df..02a1bbd66b 100644 --- a/lib/debugger/test/guard_SUITE.erl +++ b/lib/debugger/test/guard_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1999-2016. All Rights Reserved. +%% Copyright Ericsson AB 1999-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -390,7 +390,7 @@ all_types() -> {atom, xxxx}, {ref, make_ref()}, {pid, self()}, - {port, open_port({spawn, efile}, [])}, + {port, make_port()}, {function, fun(X) -> X+1, "" end}, {binary, list_to_binary([])}]. @@ -435,6 +435,9 @@ type_test(binary, X) when binary(X) -> type_test(function, X) when function(X) -> function. +make_port() -> + hd(erlang:ports()). + const_guard(Config) when is_list(Config) -> if (0 == 0) and ((0 == 0) or (0 == 0)) -> diff --git a/lib/debugger/test/int_eval_SUITE.erl b/lib/debugger/test/int_eval_SUITE.erl index 27ca4852b5..0542e45142 100644 --- a/lib/debugger/test/int_eval_SUITE.erl +++ b/lib/debugger/test/int_eval_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1999-2016. All Rights Reserved. +%% Copyright Ericsson AB 1999-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -29,7 +29,8 @@ bifs_outside_erlang/1, spawning/1, applying/1, catch_and_throw/1, external_call/1, test_module_info/1, apply_interpreted_fun/1, apply_uninterpreted_fun/1, - interpreted_exit/1, otp_8310/1, stacktrace/1, maps/1]). + interpreted_exit/1, otp_8310/1, stacktrace/1, maps/1, + call_inside_binary/1]). %% Helpers. -export([applier/3]). @@ -45,7 +46,8 @@ all() -> [bifs_outside_erlang, spawning, applying, catch_and_throw, external_call, test_module_info, apply_interpreted_fun, apply_uninterpreted_fun, - interpreted_exit, otp_8310, stacktrace, maps]. + interpreted_exit, otp_8310, stacktrace, maps, + call_inside_binary]. groups() -> []. @@ -275,6 +277,9 @@ maps(Config) when is_list(Config) -> [#{hello := 0, price := 0}] = spawn_eval(fun () -> ?IM:update_in_fun() end), ok. +call_inside_binary(Config) when is_list(Config) -> + <<"1">> = ?IM:call_inside_binary(fun erlang:integer_to_binary/1), + ok. do_eval(Config, Mod) -> DataDir = proplists:get_value(data_dir, Config), diff --git a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl index ca7929c10b..aa26a44686 100644 --- a/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl +++ b/lib/debugger/test/int_eval_SUITE_data/my_int_eval_module.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1999-2016. All Rights Reserved. +%% Copyright Ericsson AB 1999-2018. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ -export([f/1, f_try/1, f_catch/1]). -export([otp_5837/1, otp_8310/0]). -export([empty_map_update/1, update_in_fun/0]). +-export([call_inside_binary/1]). %% Internal exports. -export([echo/2,my_subtract/2,catch_a_ball/0,throw_a_ball/0]). @@ -248,3 +249,6 @@ empty_map_update(Map) -> Map#{}. update_in_fun() -> lists:map(fun (X) -> X#{price := 0} end, [#{hello => 0, price => nil}]). + +call_inside_binary(Fun) -> + <<(Fun(1))/binary>>. diff --git a/lib/debugger/vsn.mk b/lib/debugger/vsn.mk index 57da7e5618..a3cbb497f8 100644 --- a/lib/debugger/vsn.mk +++ b/lib/debugger/vsn.mk @@ -1 +1 @@ -DEBUGGER_VSN = 4.2.4 +DEBUGGER_VSN = 4.2.6 |