Index: source/Commands/CommandObjectThread.cpp =================================================================== --- source/Commands/CommandObjectThread.cpp +++ source/Commands/CommandObjectThread.cpp @@ -1227,11 +1227,26 @@ line_table->FindLineEntryByAddress(fun_end_addr, function_start, &end_ptr); + // Since not all source lines will contribute code, check if we are + // setting the breakpoint on the exact line number or the nearest + // subsequent line number and then set breakpoints at all the line + // entries of the chosen line number (exact or nearest subsequent). for (uint32_t line_number : line_numbers) { + LineEntry line_entry; + bool exact = true; uint32_t start_idx_ptr = index_ptr; + start_idx_ptr = sc.comp_unit->FindLineEntry( + index_ptr, line_number, sc.comp_unit, exact, &line_entry); + if (start_idx_ptr == UINT32_MAX) { + exact = false; + start_idx_ptr = sc.comp_unit->FindLineEntry( + index_ptr, line_number, sc.comp_unit, exact, &line_entry); + if (start_idx_ptr != UINT32_MAX) + line_number = line_entry.line; + } + exact = true; + start_idx_ptr = index_ptr; while (start_idx_ptr <= end_ptr) { - LineEntry line_entry; - const bool exact = false; start_idx_ptr = sc.comp_unit->FindLineEntry( start_idx_ptr, line_number, sc.comp_unit, exact, &line_entry); if (start_idx_ptr == UINT32_MAX)