mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
Handle Source in DAP breakpointLocations
This changes the DAP breakpointLocations request to accept a Source and to decode it properly.
This commit is contained in:
parent
c64cba1b56
commit
4b6521cf69
@ -19,11 +19,13 @@ import gdb
|
||||
from typing import Optional
|
||||
|
||||
from .server import capability, request
|
||||
from .sources import decode_source
|
||||
from .startup import in_gdb_thread, send_gdb_with_response
|
||||
|
||||
|
||||
@in_gdb_thread
|
||||
def _find_lines(filename, start_line, end_line):
|
||||
def _find_lines(source, start_line, end_line):
|
||||
filename = decode_source(source)
|
||||
lines = set()
|
||||
for entry in gdb.execute_mi("-symbol-list-lines", filename)["lines"]:
|
||||
line = entry["line"]
|
||||
@ -44,10 +46,4 @@ def _find_lines(filename, start_line, end_line):
|
||||
def breakpoint_locations(*, source, line: int, endLine: Optional[int] = None, **extra):
|
||||
if endLine is None:
|
||||
endLine = line
|
||||
if "path" in source:
|
||||
filename = source["path"]
|
||||
elif "name" in source:
|
||||
filename = source["name"]
|
||||
else:
|
||||
raise Exception("")
|
||||
return send_gdb_with_response(lambda: _find_lines(filename, line, endLine))
|
||||
return send_gdb_with_response(lambda: _find_lines(source, line, endLine))
|
||||
|
@ -54,6 +54,22 @@ def make_source(fullname, filename):
|
||||
return result
|
||||
|
||||
|
||||
@in_gdb_thread
|
||||
def decode_source(source):
|
||||
"""Decode a Source object.
|
||||
|
||||
Finds and returns the filename of a given Source object."""
|
||||
if "path" in source:
|
||||
return source["path"]
|
||||
if "sourceReference" not in source:
|
||||
raise Exception("either 'path' or 'sourceReference' must appear in Source")
|
||||
ref = source["sourceReference"]
|
||||
global _id_map
|
||||
if ref not in _id_map:
|
||||
raise Exception("no sourceReference " + str(ref))
|
||||
return _id_map[ref]["path"]
|
||||
|
||||
|
||||
@in_gdb_thread
|
||||
def _sources():
|
||||
result = []
|
||||
|
Loading…
Reference in New Issue
Block a user