[Lldb-commits] [lldb] [llvm] [Support] [lldb] Fix thread jump #45326 (PR #135778)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 15 04:33:12 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
Author: Ebuka Ezike (da-viper)
<details>
<summary>Changes</summary>
Fixes #<!-- -->45326
When you thread jump by calling
`j +2` or `thread jump --by +2` the offset is not recognised. This commit fixes that.
---
Full diff: https://github.com/llvm/llvm-project/pull/135778.diff
3 Files Affected:
- (modified) lldb/test/API/functionalities/thread/jump/TestThreadJump.py (+69-1)
- (modified) llvm/lib/Support/StringRef.cpp (+3)
- (modified) llvm/unittests/ADT/StringRefTest.cpp (+15-13)
``````````diff
diff --git a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
index 3c13a969bc3fd..d603580ac6f36 100644
--- a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
+++ b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
@@ -10,9 +10,12 @@
class ThreadJumpTestCase(TestBase):
+ def setUp(self):
+ TestBase.setUp(self)
+ self.build()
+
def test(self):
"""Test thread jump handling."""
- self.build()
exe = self.getBuildArtifact("a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
@@ -62,6 +65,71 @@ def test(self):
substrs=["error"],
)
+ def test_jump_offset(self):
+ """Test Thread Jump by negative or positive offset"""
+ exe = self.getBuildArtifact("a.out")
+ file_name = "main.cpp"
+ self.runCmd(f"target create {exe}", CURRENT_EXECUTABLE_SET)
+
+ pos_jump = line_number(file_name, "// jump_offset 1")
+ neg_jump = line_number(file_name, "// jump_offset 2")
+ pos_breakpoint = line_number(file_name, "// breakpoint 1")
+ neg_breakpoint = line_number(file_name, "// breakpoint 2")
+ pos_jump_offset = pos_jump - pos_breakpoint
+ neg_jump_offset = neg_jump - neg_breakpoint
+
+ var_1, var_1_value = ("var_1", "10")
+ var_2, var_2_value = ("var_2", "40")
+ var_3, var_3_value = ("var_3", "10")
+
+ # create pos_breakpoint and neg_breakpoint
+ lldbutil.run_break_set_by_file_and_line(
+ self, file_name, pos_breakpoint, num_expected_locations=1
+ )
+ lldbutil.run_break_set_by_file_and_line(
+ self, file_name, neg_breakpoint, num_expected_locations=1
+ )
+
+ self.runCmd("run", RUN_SUCCEEDED)
+
+ # test positive jump
+ # The stop reason of the thread should be breakpoint 1.
+ self.expect(
+ "thread list",
+ STOPPED_DUE_TO_BREAKPOINT + " 1",
+ substrs=[
+ "stopped",
+ f"{file_name}:{pos_breakpoint}",
+ "stop reason = breakpoint 1",
+ ],
+ )
+
+ self.runCmd(f"thread jump --by +{pos_jump_offset}")
+ self.expect("process status", substrs=[f"at {file_name}:{pos_jump}"])
+ self.expect(f"print {var_1}", substrs=[var_1_value])
+
+ self.runCmd("thread step-over")
+ self.expect(f"print {var_2}", substrs=[var_2_value])
+
+ self.runCmd("continue")
+
+ # test negative jump
+ # The stop reason of the thread should be breakpoint 1.
+ self.expect(
+ "thread list",
+ STOPPED_DUE_TO_BREAKPOINT + " 2",
+ substrs=[
+ "stopped",
+ f"{file_name}:{neg_breakpoint}",
+ "stop reason = breakpoint 2",
+ ],
+ )
+
+ self.runCmd(f"thread jump --by {neg_jump_offset}")
+ self.expect("process status", substrs=[f"at {file_name}:{neg_jump}"])
+ self.runCmd("thread step-over")
+ self.expect(f"print {var_3}", substrs=[var_3_value])
+
def do_min_test(self, start, jump, var, value):
# jump to the start marker
self.runCmd("j %i" % start)
diff --git a/llvm/lib/Support/StringRef.cpp b/llvm/lib/Support/StringRef.cpp
index 4f5fcb4857e80..bdf7a9aa5c7e0 100644
--- a/llvm/lib/Support/StringRef.cpp
+++ b/llvm/lib/Support/StringRef.cpp
@@ -409,6 +409,9 @@ static unsigned GetAutoSenseRadix(StringRef &Str) {
bool llvm::consumeUnsignedInteger(StringRef &Str, unsigned Radix,
unsigned long long &Result) {
+ // Consume the + value
+ Str.consume_front("+");
+
// Autosense radix if not specified.
if (Radix == 0)
Radix = GetAutoSenseRadix(Str);
diff --git a/llvm/unittests/ADT/StringRefTest.cpp b/llvm/unittests/ADT/StringRefTest.cpp
index ec9cdc197597d..55d222a915ab5 100644
--- a/llvm/unittests/ADT/StringRefTest.cpp
+++ b/llvm/unittests/ADT/StringRefTest.cpp
@@ -622,19 +622,21 @@ TEST(StringRefTest, Hashing) {
struct UnsignedPair {
const char *Str;
uint64_t Expected;
-} Unsigned[] =
- { {"0", 0}
- , {"255", 255}
- , {"256", 256}
- , {"65535", 65535}
- , {"65536", 65536}
- , {"4294967295", 4294967295ULL}
- , {"4294967296", 4294967296ULL}
- , {"18446744073709551615", 18446744073709551615ULL}
- , {"042", 34}
- , {"0x42", 66}
- , {"0b101010", 42}
- };
+} Unsigned[] = {{"0", 0},
+ {"255", 255},
+ {"256", 256},
+ {"65535", 65535},
+ {"65536", 65536},
+ {"4294967295", 4294967295ULL},
+ {"4294967296", 4294967296ULL},
+ {"18446744073709551615", 18446744073709551615ULL},
+ {"042", 34},
+ {"0x42", 66},
+ {"0b101010", 42},
+ {"+42", 42},
+ {"+042", 34},
+ {"+0x42", 66},
+ {"+0b101010", 42}};
struct SignedPair {
const char *Str;
``````````
</details>
https://github.com/llvm/llvm-project/pull/135778
More information about the lldb-commits
mailing list