[Lldb-commits] [lldb] [lldb-dap] Add 'source' references to stack frames without source files. (PR #128268)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 24 10:00:06 PST 2025
================
@@ -799,21 +788,40 @@ llvm::json::Value CreateStackFrame(lldb::SBFrame &frame,
EmplaceSafeString(object, "name", frame_name);
- auto source = CreateSource(frame);
-
- if (source) {
- object.try_emplace("source", *source);
- auto line_entry = frame.GetLineEntry();
- auto line = line_entry.GetLine();
- if (line && line != LLDB_INVALID_LINE_NUMBER)
- object.try_emplace("line", line);
- else
- object.try_emplace("line", 0);
+ auto line_entry = frame.GetLineEntry();
+ // A line entry of 0 indicates the line is compiler generated i.e. no source
+ // file is associated with the frame.
+ if (line_entry.GetFileSpec().IsValid() &&
+ (line_entry.GetLine() != 0 ||
+ line_entry.GetLine() != LLDB_INVALID_LINE_NUMBER)) {
+ object.try_emplace("source", CreateSource(line_entry));
+ object.try_emplace("line", line_entry.GetLine());
auto column = line_entry.GetColumn();
object.try_emplace("column", column);
- } else {
- object.try_emplace("line", 0);
- object.try_emplace("column", 0);
+ } else if (frame.GetSymbol().IsValid()) {
+ // If no source is associated with the frame, use the DAPFrameID to track
+ // the 'source' and generate assembly.
+ llvm::json::Object source;
+ EmplaceSafeString(source, "name", frame_name);
+ char buf[PATH_MAX] = {0};
+ size_t size = frame.GetModule().GetFileSpec().GetPath(buf, PATH_MAX);
+ EmplaceSafeString(source, "path",
+ std::string(buf, size) + '`' + frame_name);
+ source.try_emplace("sourceReference", MakeDAPFrameID(frame));
+ // Markthe source as deemphasized since users will only be able to view
+ // assembly for these frames.
----------------
JDevlieghere wrote:
```suggestion
// Mark the source as deemphasized since users will only be able to view
// assembly for these frames.
```
https://github.com/llvm/llvm-project/pull/128268
More information about the lldb-commits
mailing list