================
@@ -0,0 +1,195 @@
+"""
+Test lldb-dap stack trace when some of the source paths are missing
+"""
+
+from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.lldbtest import line_number
+import lldbdap_testcase
+from contextlib import contextmanager
+import os
+
+
+OTHER_C_SOURCE_CODE = """
+int fibonacci(int n) {
+    if (n < 0) return -1;
+    if (n == 0) return 0;
+    if (n == 1) return 1;
+    int a = 0, b = 1, c;
+    for (int i = 2; i <= n; ++i) {
+        c = a + b;
+        a = b;
+        b = c;
+    }
+
+    return b; // Break here
+}
+"""
+
+
+@contextmanager
+def delete_file_on_exit(path):
+    try:
+        yield path
+    finally:
+        if os.path.exists(path):
+            os.remove(path)
+
+
+class TestDAP_stackTraceMissingSourcePath(lldbdap_testcase.DAPTestCaseBase):
+    def build_and_run_until_breakpoint(self, stop_disassembly_display: str):
+        """
+        Build the program and run until the breakpoint is hit, and return the 
stack frames.
+        """
+        other_source_file = "other.c"
+        with delete_file_on_exit(other_source_file):
+            with open(other_source_file, "w") as f:
+                f.write(OTHER_C_SOURCE_CODE)
+
+            breakpoint_line = line_number(other_source_file, "// Break here")
+
+            program = self.getBuildArtifact("a.out")
+            init_commands = [
+                f"settings set stop-disassembly-display 
{stop_disassembly_display}"
+            ]
+            self.build_and_launch(program, initCommands=init_commands)
+
+            breakpoint_ids = self.set_source_breakpoints(
+                other_source_file, [breakpoint_line]
+            )
+            self.assertEqual(
+                len(breakpoint_ids), 1, "expect correct number of breakpoints"
+            )
+
+            self.continue_to_breakpoints(breakpoint_ids)
+
+        frames = self.get_stackFrames()
+        self.assertLessEqual(2, len(frames), "expect at least 2 frames")
+
+        self.assertIn(
+            "path",
+            frames[0]["source"],
+            "Expect source path to always be in frame (other.c)",
+        )
+        self.assertIn(
+            "path",
+            frames[1]["source"],
+            "Expect source path in always be in frame (main.c)",
+        )
+
+        return frames
+
+    @skipIfWindows
+    def test_stopDisassemblyDispay_noSource(self):
----------------
eronnen wrote:

:100: 

https://github.com/llvm/llvm-project/pull/136494
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to