summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Leviant <evgeny.leviant@gmail.com>2016-02-08 10:04:51 +0000
committerEugene Leviant <evgeny.leviant@gmail.com>2016-02-08 10:04:51 +0000
commited203da5586487b8eda9be49064c2235ba3fd112 (patch)
treeb7e6e72be9e3e52ac85d1bdb5703c2e815136a23
parent22a2a7fec11c80ce76857734521badb9c553cfff (diff)
downloadbcm5719-llvm-ed203da5586487b8eda9be49064c2235ba3fd112.tar.gz
bcm5719-llvm-ed203da5586487b8eda9be49064c2235ba3fd112.zip
Show real error message in -data-evaluate-expression
llvm-svn: 260082
-rw-r--r--lldb/packages/Python/lldbsuite/test/tools/lldb-mi/variable/TestMiVar.py2
-rw-r--r--lldb/tools/lldb-mi/MICmdCmdData.cpp9
-rw-r--r--lldb/tools/lldb-mi/MICmdCmdData.h2
3 files changed, 9 insertions, 4 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/variable/TestMiVar.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/variable/TestMiVar.py
index 9faf2f6745d..1b7b048dcd6 100644
--- a/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/variable/TestMiVar.py
+++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-mi/variable/TestMiVar.py
@@ -38,7 +38,7 @@ class MiVarTestCase(lldbmi_testcase.MiTestCaseBase):
self.runCmd("-var-create var1 * undef")
self.expect("\^error,msg=\"error: error: use of undeclared identifier \'undef\'\\\\nerror: 1 errors parsing expression\\\\n\"")
self.runCmd("-data-evaluate-expression undef")
- self.expect("\^error,msg=\"Could not evaluate expression\"")
+ self.expect("\^error,msg=\"error: use of undeclared identifier \'undef\'\\\\nerror: 1 errors parsing expression\\\\n\"")
# Print global "g_MyVar", modify, delete and create again
self.runCmd("-data-evaluate-expression g_MyVar")
diff --git a/lldb/tools/lldb-mi/MICmdCmdData.cpp b/lldb/tools/lldb-mi/MICmdCmdData.cpp
index 0e0cf12b008..a46fb5563ce 100644
--- a/lldb/tools/lldb-mi/MICmdCmdData.cpp
+++ b/lldb/tools/lldb-mi/MICmdCmdData.cpp
@@ -117,7 +117,8 @@ CMICmdCmdDataEvaluateExpression::Execute()
lldb::SBFrame frame = thread.GetSelectedFrame();
lldb::SBValue value = frame.EvaluateExpression(rExpression.c_str());
- if (!value.IsValid() || value.GetError().Fail())
+ m_Error = value.GetError();
+ if (!value.IsValid() || m_Error.Fail())
value = frame.FindVariable(rExpression.c_str());
const CMICmnLLDBUtilSBValue utilValue(value, true);
if (!utilValue.IsValid() || utilValue.IsValueUnknown())
@@ -177,8 +178,10 @@ CMICmdCmdDataEvaluateExpression::Acknowledge()
m_miResultRecord = miRecordResult;
return MIstatus::success;
}
-
- const CMICmnMIValueConst miValueConst("Could not evaluate expression");
+ CMIUtilString mi_error_msg = "Could not evaluate expression";
+ if (const char* err_msg = m_Error.GetCString())
+ mi_error_msg = err_msg;
+ const CMICmnMIValueConst miValueConst(mi_error_msg.Escape(true));
const CMICmnMIValueResult miValueResult("msg", miValueConst);
const CMICmnMIResultRecord miRecordResult(m_cmdData.strMiCmdToken, CMICmnMIResultRecord::eResultClass_Error, miValueResult);
m_miResultRecord = miRecordResult;
diff --git a/lldb/tools/lldb-mi/MICmdCmdData.h b/lldb/tools/lldb-mi/MICmdCmdData.h
index 028c71387f3..a67fd6beaf7 100644
--- a/lldb/tools/lldb-mi/MICmdCmdData.h
+++ b/lldb/tools/lldb-mi/MICmdCmdData.h
@@ -32,6 +32,7 @@
// Third party headers:
#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBError.h"
// In-house headers:
#include "MICmdBase.h"
@@ -71,6 +72,7 @@ class CMICmdCmdDataEvaluateExpression : public CMICmdBase
private:
bool m_bExpressionValid; // True = yes is valid, false = not valid
bool m_bEvaluatedExpression; // True = yes is expression evaluated, false = failed
+ lldb::SBError m_Error; // Error object, which is examined when m_bEvaluatedExpression is false
CMIUtilString m_strValue;
CMICmnMIValueTuple m_miValueTuple;
bool m_bFoundInvalidChar; // True = yes found unexpected character in the expression, false = all ok
OpenPOWER on IntegriCloud