summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Interpreter/CommandInterpreter.h22
-rw-r--r--lldb/lit/Driver/Inputs/.lldbinit1
-rw-r--r--lldb/lit/Driver/Inputs/syntax_error.py1
-rw-r--r--lldb/lit/Driver/LocalLLDBInit.test2
-rw-r--r--lldb/source/Breakpoint/BreakpointOptions.cpp1
-rw-r--r--lldb/source/Commands/CommandObjectBugreport.cpp1
-rw-r--r--lldb/source/Commands/CommandObjectCommands.cpp1
-rw-r--r--lldb/source/Commands/CommandObjectSettings.cpp1
-rw-r--r--lldb/source/Commands/CommandObjectWatchpointCommand.cpp1
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp24
-rw-r--r--lldb/source/Target/Target.cpp1
11 files changed, 48 insertions, 8 deletions
diff --git a/lldb/include/lldb/Interpreter/CommandInterpreter.h b/lldb/include/lldb/Interpreter/CommandInterpreter.h
index 70f21d45a1e..85285698db4 100644
--- a/lldb/include/lldb/Interpreter/CommandInterpreter.h
+++ b/lldb/include/lldb/Interpreter/CommandInterpreter.h
@@ -53,19 +53,23 @@ public:
/// \b false, print no ouput in this case. This setting has an effect only
/// if \param echo_commands is \b true.
/// \param[in] print_results
- /// If \b true print the results of the command after executing it. If
- /// \b false, execute silently.
+ /// If \b true and the command succeeds, print the results of the command
+ /// after executing it. If \b false, execute silently.
+ /// \param[in] print_errors
+ /// If \b true and the command fails, print the results of the command
+ /// after executing it. If \b false, execute silently.
/// \param[in] add_to_history
/// If \b true add the commands to the command history. If \b false, don't
/// add them.
CommandInterpreterRunOptions(LazyBool stop_on_continue,
LazyBool stop_on_error, LazyBool stop_on_crash,
LazyBool echo_commands, LazyBool echo_comments,
- LazyBool print_results, LazyBool add_to_history)
+ LazyBool print_results, LazyBool print_errors,
+ LazyBool add_to_history)
: m_stop_on_continue(stop_on_continue), m_stop_on_error(stop_on_error),
m_stop_on_crash(stop_on_crash), m_echo_commands(echo_commands),
m_echo_comment_commands(echo_comments), m_print_results(print_results),
- m_add_to_history(add_to_history) {}
+ m_print_errors(print_errors), m_add_to_history(add_to_history) {}
CommandInterpreterRunOptions()
: m_stop_on_continue(eLazyBoolCalculate),
@@ -73,13 +77,14 @@ public:
m_stop_on_crash(eLazyBoolCalculate),
m_echo_commands(eLazyBoolCalculate),
m_echo_comment_commands(eLazyBoolCalculate),
- m_print_results(eLazyBoolCalculate),
+ m_print_results(eLazyBoolCalculate), m_print_errors(eLazyBoolCalculate),
m_add_to_history(eLazyBoolCalculate) {}
void SetSilent(bool silent) {
LazyBool value = silent ? eLazyBoolNo : eLazyBoolYes;
m_print_results = value;
+ m_print_errors = value;
m_echo_commands = value;
m_echo_comment_commands = value;
m_add_to_history = value;
@@ -127,6 +132,12 @@ public:
m_print_results = print_results ? eLazyBoolYes : eLazyBoolNo;
}
+ bool GetPrintErrors() const { return DefaultToYes(m_print_errors); }
+
+ void SetPrintErrors(bool print_errors) {
+ m_print_errors = print_errors ? eLazyBoolYes : eLazyBoolNo;
+ }
+
bool GetAddToHistory() const { return DefaultToYes(m_add_to_history); }
void SetAddToHistory(bool add_to_history) {
@@ -139,6 +150,7 @@ public:
LazyBool m_echo_commands;
LazyBool m_echo_comment_commands;
LazyBool m_print_results;
+ LazyBool m_print_errors;
LazyBool m_add_to_history;
private:
diff --git a/lldb/lit/Driver/Inputs/.lldbinit b/lldb/lit/Driver/Inputs/.lldbinit
index 4121f7f74fe..7628917d324 100644
--- a/lldb/lit/Driver/Inputs/.lldbinit
+++ b/lldb/lit/Driver/Inputs/.lldbinit
@@ -1 +1,2 @@
settings set -f frame-format "bogus"
+command script import syntax_error.py
diff --git a/lldb/lit/Driver/Inputs/syntax_error.py b/lldb/lit/Driver/Inputs/syntax_error.py
new file mode 100644
index 00000000000..587b8043dec
--- /dev/null
+++ b/lldb/lit/Driver/Inputs/syntax_error.py
@@ -0,0 +1 @@
+prlnt("foo")
diff --git a/lldb/lit/Driver/LocalLLDBInit.test b/lldb/lit/Driver/LocalLLDBInit.test
index a5961089413..04bcca425c1 100644
--- a/lldb/lit/Driver/LocalLLDBInit.test
+++ b/lldb/lit/Driver/LocalLLDBInit.test
@@ -1,6 +1,7 @@
# RUN: mkdir -p %t.root
# RUN: mkdir -p %t.home
# RUN: cp %S/Inputs/.lldbinit %t.root
+# RUN: cp %S/Inputs/syntax_error.py %t.root
# RUN: cd %t.root
# RUN: env HOME=%t.home %lldb-init -o 'settings show frame-format' 2>&1 | FileCheck %s --check-prefix=WARNINIT --check-prefix=CHECK
# RUN: env HOME=%t.home %lldb-init -local-lldbinit -o 'settings show frame-format' 2>&1 | FileCheck %s --check-prefix=ALLOWINIT --check-prefix=NOINIT
@@ -9,4 +10,5 @@
# WARNINIT: There is a .lldbinit file in the current directory which is not being read.
# NOINIT-NOT: There is a .lldbinit file in the current directory which is not being read.
# CHECK-NOT: bogus
+# ALLOWINIT: name 'prlnt' is not defined
# ALLOWINIT: bogus
diff --git a/lldb/source/Breakpoint/BreakpointOptions.cpp b/lldb/source/Breakpoint/BreakpointOptions.cpp
index 16d0bd43b91..f6f279dc382 100644
--- a/lldb/source/Breakpoint/BreakpointOptions.cpp
+++ b/lldb/source/Breakpoint/BreakpointOptions.cpp
@@ -646,6 +646,7 @@ bool BreakpointOptions::BreakpointOptionsCallbackFunction(
options.SetStopOnError(data->stop_on_error);
options.SetEchoCommands(true);
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetAddToHistory(false);
debugger.GetCommandInterpreter().HandleCommands(commands, &exe_ctx,
diff --git a/lldb/source/Commands/CommandObjectBugreport.cpp b/lldb/source/Commands/CommandObjectBugreport.cpp
index abad6f82ecd..515cc9a113b 100644
--- a/lldb/source/Commands/CommandObjectBugreport.cpp
+++ b/lldb/source/Commands/CommandObjectBugreport.cpp
@@ -94,6 +94,7 @@ protected:
options.SetStopOnError(false);
options.SetEchoCommands(true);
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetAddToHistory(false);
m_interpreter.HandleCommands(commands, &m_exe_ctx, options, result);
diff --git a/lldb/source/Commands/CommandObjectCommands.cpp b/lldb/source/Commands/CommandObjectCommands.cpp
index 70251717c23..4092e76be6a 100644
--- a/lldb/source/Commands/CommandObjectCommands.cpp
+++ b/lldb/source/Commands/CommandObjectCommands.cpp
@@ -322,6 +322,7 @@ protected:
options.SetSilent(true);
} else {
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetEchoCommands(m_interpreter.GetEchoCommands());
options.SetEchoCommentCommands(m_interpreter.GetEchoCommentCommands());
}
diff --git a/lldb/source/Commands/CommandObjectSettings.cpp b/lldb/source/Commands/CommandObjectSettings.cpp
index 806b0c17da5..e7e72de5a7e 100644
--- a/lldb/source/Commands/CommandObjectSettings.cpp
+++ b/lldb/source/Commands/CommandObjectSettings.cpp
@@ -501,6 +501,7 @@ protected:
options.SetAddToHistory(false);
options.SetEchoCommands(false);
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetStopOnError(false);
m_interpreter.HandleCommandsFromFile(file, &clean_ctx, options, result);
return result.Succeeded();
diff --git a/lldb/source/Commands/CommandObjectWatchpointCommand.cpp b/lldb/source/Commands/CommandObjectWatchpointCommand.cpp
index 3c8eb59063c..8be6688fc3a 100644
--- a/lldb/source/Commands/CommandObjectWatchpointCommand.cpp
+++ b/lldb/source/Commands/CommandObjectWatchpointCommand.cpp
@@ -295,6 +295,7 @@ are no syntax errors may indicate that a function was declared but never called.
options.SetStopOnError(data->stop_on_error);
options.SetEchoCommands(false);
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetAddToHistory(false);
debugger.GetCommandInterpreter().HandleCommands(commands, &exe_ctx,
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 0811822ff14..df583bc72dc 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -2173,6 +2173,7 @@ void CommandInterpreter::SourceInitFile(bool in_cwd,
const bool saved_batch = SetBatchCommandMode(true);
CommandInterpreterRunOptions options;
options.SetSilent(true);
+ options.SetPrintErrors(true);
options.SetStopOnError(false);
options.SetStopOnContinue(true);
@@ -2364,7 +2365,8 @@ enum {
eHandleCommandFlagEchoCommand = (1u << 2),
eHandleCommandFlagEchoCommentCommand = (1u << 3),
eHandleCommandFlagPrintResult = (1u << 4),
- eHandleCommandFlagStopOnCrash = (1u << 5)
+ eHandleCommandFlagPrintErrors = (1u << 5),
+ eHandleCommandFlagStopOnCrash = (1u << 6)
};
void CommandInterpreter::HandleCommandsFromFile(
@@ -2463,6 +2465,17 @@ void CommandInterpreter::HandleCommandsFromFile(
flags |= eHandleCommandFlagPrintResult;
}
+ if (options.m_print_errors == eLazyBoolCalculate) {
+ if (m_command_source_flags.empty()) {
+ // Print output by default
+ flags |= eHandleCommandFlagPrintErrors;
+ } else if (m_command_source_flags.back() & eHandleCommandFlagPrintErrors) {
+ flags |= eHandleCommandFlagPrintErrors;
+ }
+ } else if (options.m_print_errors == eLazyBoolYes) {
+ flags |= eHandleCommandFlagPrintErrors;
+ }
+
if (flags & eHandleCommandFlagPrintResult) {
debugger.GetOutputFile()->Printf("Executing commands in '%s'.\n",
cmd_file_path.c_str());
@@ -2790,7 +2803,9 @@ void CommandInterpreter::IOHandlerInputComplete(IOHandler &io_handler,
HandleCommand(line.c_str(), eLazyBoolCalculate, result);
// Now emit the command output text from the command we just executed
- if (io_handler.GetFlags().Test(eHandleCommandFlagPrintResult)) {
+ if ((result.Succeeded() &&
+ io_handler.GetFlags().Test(eHandleCommandFlagPrintResult)) ||
+ io_handler.GetFlags().Test(eHandleCommandFlagPrintErrors)) {
// Display any STDOUT/STDERR _prior_ to emitting the command result text
GetProcessOutput();
@@ -2960,8 +2975,11 @@ CommandInterpreter::GetIOHandler(bool force_create,
flags |= eHandleCommandFlagEchoCommentCommand;
if (options->m_print_results != eLazyBoolNo)
flags |= eHandleCommandFlagPrintResult;
+ if (options->m_print_errors != eLazyBoolNo)
+ flags |= eHandleCommandFlagPrintErrors;
} else {
- flags = eHandleCommandFlagEchoCommand | eHandleCommandFlagPrintResult;
+ flags = eHandleCommandFlagEchoCommand | eHandleCommandFlagPrintResult |
+ eHandleCommandFlagPrintErrors;
}
m_command_io_handler_sp = std::make_shared<IOHandlerEditline>(
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 5fbe33b5557..58f23251305 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2652,6 +2652,7 @@ void Target::RunStopHooks() {
options.SetStopOnError(true);
options.SetEchoCommands(false);
options.SetPrintResults(true);
+ options.SetPrintErrors(true);
options.SetAddToHistory(false);
// Force Async:
OpenPOWER on IntegriCloud