================ @@ -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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits