tammela created this revision. tammela requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
LLDB is ignoring compilation errors for one-line breakpoint scripts. This patch fixes the issues and now the error message of the ScriptInterpreter is shown to the user. I had to remove a new-line character for the Lua interpreter since it was duplicated. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D92729 Files: lldb/source/Commands/CommandObjectBreakpointCommand.cpp lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp lldb/test/Shell/ScriptInterpreter/Lua/fail_breakpoint_oneline.test lldb/test/Shell/ScriptInterpreter/Python/fail_breakpoint_oneline.test Index: lldb/test/Shell/ScriptInterpreter/Python/fail_breakpoint_oneline.test =================================================================== --- /dev/null +++ lldb/test/Shell/ScriptInterpreter/Python/fail_breakpoint_oneline.test @@ -0,0 +1,7 @@ +# REQUIRES: python +# UNSUPPORTED: lldb-repro +# +# RUN: cat %s | %lldb --script-language python 2>&1 | FileCheck %s +b main +breakpoint command add -s python -o "1234_foo" +# CHECK: error: SyntaxError({{.*}}) Index: lldb/test/Shell/ScriptInterpreter/Lua/fail_breakpoint_oneline.test =================================================================== --- /dev/null +++ lldb/test/Shell/ScriptInterpreter/Lua/fail_breakpoint_oneline.test @@ -0,0 +1,5 @@ +# REQUIRES: lua +# RUN: %lldb -s %s --script-language lua 2>&1 | FileCheck %s +b main +breakpoint command add -s lua -o '1234_foo' +# CHECK: error: {{.*}} unexpected symbol near '1234' Index: lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp =================================================================== --- lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp +++ lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp @@ -86,7 +86,7 @@ std::string func_str = llvm::formatv(fmt_str, body).str(); if (luaL_dostring(m_lua_state, func_str.c_str()) != LUA_OK) { llvm::Error e = llvm::make_error<llvm::StringError>( - llvm::formatv("{0}\n", lua_tostring(m_lua_state, -1)), + llvm::formatv("{0}", lua_tostring(m_lua_state, -1)), llvm::inconvertibleErrorCode()); // Pop error message from the stack. lua_pop(m_lua_state, 2); Index: lldb/source/Commands/CommandObjectBreakpointCommand.cpp =================================================================== --- lldb/source/Commands/CommandObjectBreakpointCommand.cpp +++ lldb/source/Commands/CommandObjectBreakpointCommand.cpp @@ -414,22 +414,23 @@ // to set or collect command callback. Otherwise, call the methods // associated with this object. if (m_options.m_use_script_language) { + Status error; ScriptInterpreter *script_interp = GetDebugger().GetScriptInterpreter( /*can_create=*/true, m_options.m_script_language); // Special handling for one-liner specified inline. if (m_options.m_use_one_liner) { - script_interp->SetBreakpointCommandCallback( + error = script_interp->SetBreakpointCommandCallback( m_bp_options_vec, m_options.m_one_liner.c_str()); } else if (!m_func_options.GetName().empty()) { - Status error = script_interp->SetBreakpointCommandCallbackFunction( + error = script_interp->SetBreakpointCommandCallbackFunction( m_bp_options_vec, m_func_options.GetName().c_str(), m_func_options.GetStructuredData()); - if (!error.Success()) - result.SetError(error); } else { script_interp->CollectDataForBreakpointCommandCallback( m_bp_options_vec, result); } + if (!error.Success()) + result.SetError(error); } else { // Special handling for one-liner specified inline. if (m_options.m_use_one_liner)
Index: lldb/test/Shell/ScriptInterpreter/Python/fail_breakpoint_oneline.test =================================================================== --- /dev/null +++ lldb/test/Shell/ScriptInterpreter/Python/fail_breakpoint_oneline.test @@ -0,0 +1,7 @@ +# REQUIRES: python +# UNSUPPORTED: lldb-repro +# +# RUN: cat %s | %lldb --script-language python 2>&1 | FileCheck %s +b main +breakpoint command add -s python -o "1234_foo" +# CHECK: error: SyntaxError({{.*}}) Index: lldb/test/Shell/ScriptInterpreter/Lua/fail_breakpoint_oneline.test =================================================================== --- /dev/null +++ lldb/test/Shell/ScriptInterpreter/Lua/fail_breakpoint_oneline.test @@ -0,0 +1,5 @@ +# REQUIRES: lua +# RUN: %lldb -s %s --script-language lua 2>&1 | FileCheck %s +b main +breakpoint command add -s lua -o '1234_foo' +# CHECK: error: {{.*}} unexpected symbol near '1234' Index: lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp =================================================================== --- lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp +++ lldb/source/Plugins/ScriptInterpreter/Lua/Lua.cpp @@ -86,7 +86,7 @@ std::string func_str = llvm::formatv(fmt_str, body).str(); if (luaL_dostring(m_lua_state, func_str.c_str()) != LUA_OK) { llvm::Error e = llvm::make_error<llvm::StringError>( - llvm::formatv("{0}\n", lua_tostring(m_lua_state, -1)), + llvm::formatv("{0}", lua_tostring(m_lua_state, -1)), llvm::inconvertibleErrorCode()); // Pop error message from the stack. lua_pop(m_lua_state, 2); Index: lldb/source/Commands/CommandObjectBreakpointCommand.cpp =================================================================== --- lldb/source/Commands/CommandObjectBreakpointCommand.cpp +++ lldb/source/Commands/CommandObjectBreakpointCommand.cpp @@ -414,22 +414,23 @@ // to set or collect command callback. Otherwise, call the methods // associated with this object. if (m_options.m_use_script_language) { + Status error; ScriptInterpreter *script_interp = GetDebugger().GetScriptInterpreter( /*can_create=*/true, m_options.m_script_language); // Special handling for one-liner specified inline. if (m_options.m_use_one_liner) { - script_interp->SetBreakpointCommandCallback( + error = script_interp->SetBreakpointCommandCallback( m_bp_options_vec, m_options.m_one_liner.c_str()); } else if (!m_func_options.GetName().empty()) { - Status error = script_interp->SetBreakpointCommandCallbackFunction( + error = script_interp->SetBreakpointCommandCallbackFunction( m_bp_options_vec, m_func_options.GetName().c_str(), m_func_options.GetStructuredData()); - if (!error.Success()) - result.SetError(error); } else { script_interp->CollectDataForBreakpointCommandCallback( m_bp_options_vec, result); } + if (!error.Success()) + result.SetError(error); } else { // Special handling for one-liner specified inline. if (m_options.m_use_one_liner)
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits