From 0b7de6d3ee07653e97e65a2968742c93b7102f62 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Fri, 1 Sep 2023 16:02:20 -0500 Subject: gdb/dap: only include sourceReference if file path does not exist According to the DAP specification if the "sourceReference" field is included in a Source object, then the DAP client _must_ make a "source" request to the debugger to retrieve file contents, even if the Source object also includes path information. If the Source's path field is a valid path that the DAP client is able to read from the filesystem, having to make another request to the debugger to get the file contents is wasteful and leads to incorrect results (DAP clients will try to get the contents from the server and display those contents as a file with the name in "source.path", but this will conflict with the _acutal_ existing file at "source.path"). Instead, only set "sourceReference" if the source file path does not exist. Approved-By: Tom Tromey --- gdb/python/lib/gdb/dap/sources.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'gdb/python') diff --git a/gdb/python/lib/gdb/dap/sources.py b/gdb/python/lib/gdb/dap/sources.py index 7fa1ae4..00a7070 100644 --- a/gdb/python/lib/gdb/dap/sources.py +++ b/gdb/python/lib/gdb/dap/sources.py @@ -13,6 +13,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import os + import gdb from .server import request, capability @@ -41,16 +43,20 @@ def make_source(fullname, filename): if fullname in _source_map: result = _source_map[fullname] else: - global _next_source result = { "name": filename, "path": fullname, - "sourceReference": _next_source, } + + if not os.path.exists(fullname): + global _next_source + result["sourceReference"] = _next_source + + global _id_map + _id_map[_next_source] = result + _next_source += 1 + _source_map[fullname] = result - global _id_map - _id_map[_next_source] = result - _next_source += 1 return result -- cgit v1.1