Skip to content

Commit

Permalink
Revert "Revert "[lldb-dap] Mark hidden frames as "subtle" (#105457)""
Browse files Browse the repository at this point in the history
This reverts commit aa70f83.
  • Loading branch information
adrian-prantl committed Aug 23, 2024
1 parent 3c0fba4 commit 9e9e823
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lldb/test/API/tools/lldb-dap/stackTrace/subtleFrames/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CXX_SOURCES := main.cpp

include Makefile.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""
Test lldb-dap stack trace response
"""


import dap_server
from lldbsuite.test.decorators import *

import lldbdap_testcase
from lldbsuite.test.lldbtest import *


class TestDAP_subtleFrames(lldbdap_testcase.DAPTestCaseBase):
@add_test_categories(["libc++"])
def test_subtleFrames(self):
"""
Internal stack frames (such as the ones used by `std::function`) are marked as "subtle".
"""
program = self.getBuildArtifact("a.out")
self.build_and_launch(program)
source = "main.cpp"
self.set_source_breakpoints(source, [line_number(source, "BREAK HERE")])
self.continue_to_next_stop()

frames = self.get_stackFrames()
for f in frames:
if "__function" in f["name"]:
self.assertEqual(f["presentationHint"], "subtle")
self.assertTrue(any(f.get("presentationHint") == "subtle" for f in frames))
13 changes: 13 additions & 0 deletions lldb/test/API/tools/lldb-dap/stackTrace/subtleFrames/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include <functional>
#include <iostream>

void greet() {
// BREAK HERE
std::cout << "Hello\n";
}

int main() {
std::function<void()> func{greet};
func();
return 0;
}
3 changes: 3 additions & 0 deletions lldb/tools/lldb-dap/JSONUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,9 @@ llvm::json::Value CreateStackFrame(lldb::SBFrame &frame) {
object.try_emplace("instructionPointerReference", formatted_addr);
}

if (frame.IsArtificial() || frame.IsHidden())
object.try_emplace("presentationHint", "subtle");

return llvm::json::Value(std::move(object));
}

Expand Down

0 comments on commit 9e9e823

Please sign in to comment.