[Lldb-commits] [PATCH] D50304: [lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers
Venkata Ramanaiah Nalamothu via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 2 10:04:31 PDT 2022
RamNalamothu updated this revision to Diff 433784.
RamNalamothu retitled this revision from "[lldb] CommandObjectThreadUntil should set breakpoint at either on exact or the nearest subsequent line number but not on all the subsequent line numbers" to "[lldb] Fix thread step until to not set breakpoint(s) on incorrect line numbers".
RamNalamothu edited the summary of this revision.
RamNalamothu added a comment.
Herald added a project: LLDB.
Added the test coverage.
By the way, I am surprized that it looks like no else landed into this issue since the time I got into it during Aug/2018.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D50304/new/
https://reviews.llvm.org/D50304
Files:
lldb/source/Commands/CommandObjectThread.cpp
lldb/test/API/functionalities/thread/step_until/TestStepUntil.py
Index: lldb/test/API/functionalities/thread/step_until/TestStepUntil.py
===================================================================
--- lldb/test/API/functionalities/thread/step_until/TestStepUntil.py
+++ lldb/test/API/functionalities/thread/step_until/TestStepUntil.py
@@ -21,7 +21,7 @@
self.greater_than_two = line_number('main.c', 'Greater than or equal to 2.')
self.back_out_in_main = line_number('main.c', 'Back out in main')
- def do_until (self, args, until_lines, expected_linenum):
+ def common_setup (self, args):
self.build()
exe = self.getBuildArtifact("a.out")
@@ -50,7 +50,8 @@
thread = threads[0]
return thread
- thread = self.common_setup(None)
+ def do_until (self, args, until_lines, expected_linenum):
+ thread = self.common_setup(args)
cmd_interp = self.dbg.GetCommandInterpreter()
ret_obj = lldb.SBCommandReturnObject()
@@ -79,7 +80,7 @@
self.do_until(None, [self.less_than_two, self.greater_than_two], self.less_than_two)
def test_missing_one (self):
- """Test thread step until - targeting one line and missing it."""
+ """Test thread step until - targeting one line and missing it by stepping out to call site"""
self.do_until(["foo", "bar", "baz"], [self.less_than_two], self.back_out_in_main)
Index: lldb/source/Commands/CommandObjectThread.cpp
===================================================================
--- lldb/source/Commands/CommandObjectThread.cpp
+++ lldb/source/Commands/CommandObjectThread.cpp
@@ -1034,11 +1034,21 @@
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 set breakpoints at all the line table
+ // entries of the chosen line number (exact or nearest subsequent).
for (uint32_t line_number : line_numbers) {
+ LineEntry line_entry;
+ bool exact = false;
uint32_t start_idx_ptr = index_ptr;
+ start_idx_ptr = sc.comp_unit->FindLineEntry(
+ index_ptr, line_number, nullptr, 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, nullptr, exact, &line_entry);
if (start_idx_ptr == UINT32_MAX)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50304.433784.patch
Type: text/x-patch
Size: 2791 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220602/1491a453/attachment-0001.bin>
More information about the lldb-commits
mailing list