Skip to content

Commit 1af4c9e

Browse files
improve error messages
1 parent 8ae7669 commit 1af4c9e

File tree

1 file changed

+44
-22
lines changed

1 file changed

+44
-22
lines changed

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -244,15 +244,20 @@ GetAndValidateInfo(const SymbolContext &sc) {
244244

245245
auto demangled_name = mangled.GetDemangledName().GetStringRef();
246246
if (demangled_name.empty())
247-
return llvm::createStringError("Function does not have a demangled name.");
247+
return llvm::createStringError(
248+
"Function '%s' does not have a demangled name.",
249+
mangled.GetMangledName().AsCString(""));
248250

249251
const std::optional<DemangledNameInfo> &info = mangled.GetDemangledInfo();
250252
if (!info)
251-
return llvm::createStringError("Function does not have demangled info.");
253+
return llvm::createStringError(
254+
"Function '%s' does not have demangled info.", demangled_name.data());
252255

253256
// Function without a basename is nonsense.
254257
if (!info->hasBasename())
255-
return llvm::createStringError("Info do not have basename range.");
258+
return llvm::createStringError(
259+
"DemangledInfo for '%s does not have basename range.",
260+
demangled_name.data());
256261

257262
return std::make_pair(demangled_name, *info);
258263
}
@@ -278,7 +283,8 @@ GetDemangledTemplateArguments(const SymbolContext &sc) {
278283
auto [demangled_name, info] = *info_or_err;
279284

280285
if (info.ArgumentsRange.first < info.BasenameRange.second)
281-
return llvm::createStringError("Arguments in info are invalid.");
286+
return llvm::createStringError("Arguments range for '%s' is invalid.",
287+
demangled_name.data());
282288

283289
return demangled_name.slice(info.BasenameRange.second,
284290
info.ArgumentsRange.first);
@@ -293,7 +299,9 @@ GetDemangledReturnTypeLHS(const SymbolContext &sc) {
293299
auto [demangled_name, info] = *info_or_err;
294300

295301
if (info.ScopeRange.first >= demangled_name.size())
296-
return llvm::createStringError("Scope range is invalid.");
302+
return llvm::createStringError(
303+
"Scope range for '%s' LHS return type is invalid.",
304+
demangled_name.data());
297305

298306
return demangled_name.substr(0, info.ScopeRange.first);
299307
}
@@ -307,7 +315,8 @@ GetDemangledFunctionQualifiers(const SymbolContext &sc) {
307315
auto [demangled_name, info] = *info_or_err;
308316

309317
if (info.QualifiersRange.second < info.QualifiersRange.first)
310-
return llvm::createStringError("Qualifiers range is invalid.");
318+
return llvm::createStringError("Qualifiers range for '%s' is invalid.",
319+
demangled_name.data());
311320

312321
return demangled_name.slice(info.QualifiersRange.first,
313322
info.QualifiersRange.second);
@@ -321,8 +330,12 @@ GetDemangledReturnTypeRHS(const SymbolContext &sc) {
321330

322331
auto [demangled_name, info] = *info_or_err;
323332

324-
if (info.QualifiersRange.first < info.ArgumentsRange.second)
325-
return llvm::createStringError("Qualifiers range is invalid.");
333+
if (info.QualifiersRange.first <
334+
info.ArgumentsRange.second) // TODO: Replace with .hasArgumentsRange()
335+
// once #144549 lands.
336+
return llvm::createStringError(
337+
"Qualifiers range for '%s' RHS return type is invalid.",
338+
demangled_name.data());
326339

327340
return demangled_name.slice(info.ArgumentsRange.second,
328341
info.QualifiersRange.first);
@@ -337,7 +350,8 @@ GetDemangledScope(const SymbolContext &sc) {
337350
auto [demangled_name, info] = *info_or_err;
338351

339352
if (info.ScopeRange.second < info.ScopeRange.first)
340-
return llvm::createStringError("Info do not have basename range.");
353+
return llvm::createStringError("Scope range for '%s' is invalid.",
354+
demangled_name.data());
341355

342356
return demangled_name.slice(info.ScopeRange.first, info.ScopeRange.second);
343357
}
@@ -360,8 +374,9 @@ static bool PrintDemangledArgumentList(Stream &s, const SymbolContext &sc) {
360374

361375
auto info_or_err = GetAndValidateInfo(sc);
362376
if (!info_or_err) {
363-
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), info_or_err.takeError(),
364-
"Failed to retrieve demangled info: {0}");
377+
LLDB_LOG_ERROR(
378+
GetLog(LLDBLog::Language), info_or_err.takeError(),
379+
"Failed to handle ${function.basename} frame-format variable: {0}");
365380
return false;
366381
}
367382
auto [demangled_name, info] = *info_or_err;
@@ -1898,8 +1913,9 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
18981913
case FormatEntity::Entry::Type::FunctionScope: {
18991914
auto scope_or_err = GetDemangledScope(sc);
19001915
if (!scope_or_err) {
1901-
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), scope_or_err.takeError(),
1902-
"Failed to retrieve scope: {0}");
1916+
LLDB_LOG_ERROR(
1917+
GetLog(LLDBLog::Language), scope_or_err.takeError(),
1918+
"Failed to handle ${function.scope} frame-format variable: {0}");
19031919
return false;
19041920
}
19051921

@@ -1911,8 +1927,9 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19111927
case FormatEntity::Entry::Type::FunctionBasename: {
19121928
auto name_or_err = GetDemangledBasename(sc);
19131929
if (!name_or_err) {
1914-
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), name_or_err.takeError(),
1915-
"Failed to retrieve basename: {0}");
1930+
LLDB_LOG_ERROR(
1931+
GetLog(LLDBLog::Language), name_or_err.takeError(),
1932+
"Failed to handle ${function.basename} frame-format variable: {0}");
19161933
return false;
19171934
}
19181935

@@ -1926,7 +1943,8 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19261943
if (!template_args_or_err) {
19271944
LLDB_LOG_ERROR(GetLog(LLDBLog::Language),
19281945
template_args_or_err.takeError(),
1929-
"Failed to retrieve template arguments: {0}");
1946+
"Failed to handle ${function.template-arguments} "
1947+
"frame-format variable: {0}");
19301948
return false;
19311949
}
19321950

@@ -1962,7 +1980,8 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19621980
auto return_rhs_or_err = GetDemangledReturnTypeRHS(sc);
19631981
if (!return_rhs_or_err) {
19641982
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), return_rhs_or_err.takeError(),
1965-
"Failed to retrieve RHS return type: {0}");
1983+
"Failed to handle ${function.return-right} frame-format "
1984+
"variable: {0}");
19661985
return false;
19671986
}
19681987

@@ -1974,7 +1993,8 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19741993
auto return_lhs_or_err = GetDemangledReturnTypeLHS(sc);
19751994
if (!return_lhs_or_err) {
19761995
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), return_lhs_or_err.takeError(),
1977-
"Failed to retrieve LHS return type: {0}");
1996+
"Failed to handle ${function.return-left} frame-format "
1997+
"variable: {0}");
19781998
return false;
19791999
}
19802000

@@ -1985,8 +2005,9 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19852005
case FormatEntity::Entry::Type::FunctionQualifiers: {
19862006
auto quals_or_err = GetDemangledFunctionQualifiers(sc);
19872007
if (!quals_or_err) {
1988-
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), quals_or_err.takeError(),
1989-
"Failed to retrieve function qualifiers: {0}");
2008+
LLDB_LOG_ERROR(
2009+
GetLog(LLDBLog::Language), quals_or_err.takeError(),
2010+
"Failed to handle ${function.qualifiers} frame-format variable: {0}");
19902011
return false;
19912012
}
19922013

@@ -1997,8 +2018,9 @@ bool CPlusPlusLanguage::HandleFrameFormatVariable(
19972018
case FormatEntity::Entry::Type::FunctionSuffix: {
19982019
auto suffix_or_err = GetDemangledFunctionSuffix(sc);
19992020
if (!suffix_or_err) {
2000-
LLDB_LOG_ERROR(GetLog(LLDBLog::Language), suffix_or_err.takeError(),
2001-
"Failed to retrieve suffix: {0}");
2021+
LLDB_LOG_ERROR(
2022+
GetLog(LLDBLog::Language), suffix_or_err.takeError(),
2023+
"Failed to handle ${function.suffix} frame-format variable: {0}");
20022024
return false;
20032025
}
20042026

0 commit comments

Comments
 (0)