diff --git a/lldb/include/lldb/Interpreter/CommandReturnObject.h b/lldb/include/lldb/Interpreter/CommandReturnObject.h --- a/lldb/include/lldb/Interpreter/CommandReturnObject.h +++ b/lldb/include/lldb/Interpreter/CommandReturnObject.h @@ -63,20 +63,28 @@ } void SetImmediateOutputFile(lldb::FileSP file_sp) { + if (m_suppress_immediate_output) + return; lldb::StreamSP stream_sp(new StreamFile(file_sp)); m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp); } void SetImmediateErrorFile(lldb::FileSP file_sp) { + if (m_suppress_immediate_output) + return; lldb::StreamSP stream_sp(new StreamFile(file_sp)); m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp); } void SetImmediateOutputStream(const lldb::StreamSP &stream_sp) { + if (m_suppress_immediate_output) + return; m_out_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp); } void SetImmediateErrorStream(const lldb::StreamSP &stream_sp) { + if (m_suppress_immediate_output) + return; m_err_stream.SetStreamAtIndex(eImmediateStreamIndex, stream_sp); } @@ -142,16 +150,23 @@ void SetInteractive(bool b); + bool GetSuppressImmediateOutput() const; + + void SetSuppressImmediateOutput(bool b); + private: enum { eStreamStringIndex = 0, eImmediateStreamIndex = 1 }; StreamTee m_out_stream; StreamTee m_err_stream; - lldb::ReturnStatus m_status; - bool m_did_change_process_state; - bool m_interactive; // If true, then the input handle from the debugger will - // be hooked up + lldb::ReturnStatus m_status = lldb::eReturnStatusStarted; + + bool m_did_change_process_state = false; + bool m_suppress_immediate_output = false; + + /// If true, then the input handle from the debugger will be hooked up. + bool m_interactive = true; }; } // namespace lldb_private diff --git a/lldb/lldb/test/Shell/Breakpoint/breakpoint-command.test b/lldb/lldb/test/Shell/Breakpoint/breakpoint-command.test new file mode 100644 --- /dev/null +++ b/lldb/lldb/test/Shell/Breakpoint/breakpoint-command.test @@ -0,0 +1,5 @@ +# RUN: %build %p/Inputs/dummy-target.c -o %t.out +# RUN: %lldb %t.out -o 'b main' -o 'break command add 1 -o "script print(95000 + 126)"' -o 'r' + +# CHECK: 95125 +# CHECK-NOT: 95126 diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -2306,6 +2306,7 @@ CommandReturnObject tmp_result(m_debugger.GetUseColor()); tmp_result.SetInteractive(result.GetInteractive()); + tmp_result.SetSuppressImmediateOutput(true); // We might call into a regex or alias command, in which case the // add_to_history will get lost. This m_command_source_depth dingus is the diff --git a/lldb/source/Interpreter/CommandReturnObject.cpp b/lldb/source/Interpreter/CommandReturnObject.cpp --- a/lldb/source/Interpreter/CommandReturnObject.cpp +++ b/lldb/source/Interpreter/CommandReturnObject.cpp @@ -41,9 +41,7 @@ } CommandReturnObject::CommandReturnObject(bool colors) - : m_out_stream(colors), m_err_stream(colors), - m_status(eReturnStatusStarted), m_did_change_process_state(false), - m_interactive(true) {} + : m_out_stream(colors), m_err_stream(colors) {} void CommandReturnObject::AppendErrorWithFormat(const char *format, ...) { SetStatus(eReturnStatusFailed); @@ -154,6 +152,7 @@ static_cast(stream_sp.get())->Clear(); m_status = eReturnStatusStarted; m_did_change_process_state = false; + m_suppress_immediate_output = false; m_interactive = true; } @@ -168,3 +167,11 @@ bool CommandReturnObject::GetInteractive() const { return m_interactive; } void CommandReturnObject::SetInteractive(bool b) { m_interactive = b; } + +bool CommandReturnObject::GetSuppressImmediateOutput() const { + return m_suppress_immediate_output; +} + +void CommandReturnObject::SetSuppressImmediateOutput(bool b) { + m_suppress_immediate_output = b; +} diff --git a/lldb/test/Shell/Breakpoint/breakpoint-command.test b/lldb/test/Shell/Breakpoint/breakpoint-command.test new file mode 100644 --- /dev/null +++ b/lldb/test/Shell/Breakpoint/breakpoint-command.test @@ -0,0 +1,5 @@ +# RUN: %build %p/Inputs/dummy-target.c -o %t.out +# RUN: %lldb %t.out -o 'b main' -o 'break command add 1 -o "script print(95000 + 126)"' -o 'r' + +# CHECK: 95125 +# CHECK-NOT: 95126 diff --git a/lldb/test/Shell/ScriptInterpreter/Lua/nested_sessions.test b/lldb/test/Shell/ScriptInterpreter/Lua/nested_sessions.test --- a/lldb/test/Shell/ScriptInterpreter/Lua/nested_sessions.test +++ b/lldb/test/Shell/ScriptInterpreter/Lua/nested_sessions.test @@ -7,6 +7,5 @@ # CHECK-NEXT: foo foo # CHECK-NEXT: foo bar # CHECK-NEXT: foo bar -# CHECK-NEXT: foo bar # CHECK: script # CHECK-NEXT: bar bar