[LLDB][NFC] Fix optons parsing and misc. reliability in CommandObjectThread

* Improve reliability by checking return results for calls to FindLineEntryByAddress()
* Fix broken option parsing in SetOptionValue()

Differential Revision: https://reviews.llvm.org/D131983
This commit is contained in:
Slava Gurevich 2022-08-15 01:51:49 -07:00
parent b217a78720
commit 461b410159
1 changed files with 21 additions and 10 deletions

View File

@ -62,15 +62,13 @@ public:
const int short_option = m_getopt_table[option_idx].val;
switch (short_option) {
case 'c': {
int32_t input_count = 0;
if (option_arg.getAsInteger(0, m_count)) {
case 'c':
if (option_arg.getAsInteger(0, m_count) || (m_count < 0)) {
m_count = UINT32_MAX;
error.SetErrorStringWithFormat(
"invalid integer value for option '%c'", short_option);
} else if (input_count < 0)
m_count = UINT32_MAX;
} break;
}
break;
case 's':
if (option_arg.getAsInteger(0, m_start))
error.SetErrorStringWithFormat(
@ -1004,8 +1002,15 @@ protected:
AddressRange fun_addr_range = sc.function->GetAddressRange();
Address fun_start_addr = fun_addr_range.GetBaseAddress();
line_table->FindLineEntryByAddress(fun_start_addr, function_start,
&index_ptr);
if (!line_table->FindLineEntryByAddress(fun_start_addr, function_start,
&index_ptr)) {
result.AppendErrorWithFormat(
"Failed to find line entry by address for "
"frame %u of thread id %" PRIu64 ".\n",
m_options.m_frame_idx, thread->GetID());
return false;
}
Address fun_end_addr(fun_start_addr.GetSection(),
fun_start_addr.GetOffset() +
@ -1013,8 +1018,14 @@ protected:
bool all_in_function = true;
line_table->FindLineEntryByAddress(fun_end_addr, function_start,
&end_ptr);
if (!line_table->FindLineEntryByAddress(fun_end_addr, function_start,
&end_ptr)) {
result.AppendErrorWithFormat(
"Failed to find line entry by address for "
"frame %u of thread id %" PRIu64 ".\n",
m_options.m_frame_idx, thread->GetID());
return false;
}
// Since not all source lines will contribute code, check if we are
// setting the breakpoint on the exact line number or the nearest