[PATCH 0/8] Handle array- and string-like types in DAP

Tom Tromey tromey@adacore.com
Tue Aug 22 15:25:06 GMT 2023


A co-worker noticed that some Ada array types did not display properly
via DAP.  Looking into this, I found a couple related problems.

In Ada, some arrays are represented as structures.  The Ada code in
gdb (ada-valprint.c and ada-varobj.c) know how to display these as
arrays, instead.

Also, in Ada, a String is just an array of characters, and again the
Ada code in gdb understands this and displays them more naturally.

Similar cases occur in Rust.

After thinking about this for a while, I decided to try to take a
relatively generic approach to fixing this.  This series adds some
Python API so that Python code can know if a type is "array-like" or
"string-like", and then changes the no-op value-printers to use this
information.

All the tests are deferred until the end of the series.

---
Tom Tromey (8):
      Move rust_language::lookup_symbol_nonlocal
      Refactor Rust code for slice-to-array operation
      Introduce TYPE_SPECIFIC_RUST_STUFF
      Use ada_value_subscript in valpy_getitem
      Introduce type::is_array_like and value_to_array
      Select frame when fetching a frame variable in DAP
      Add new Python APIs to support DAP value display
      Handle array- and string-like values in no-op pretty printers

 gdb/NEWS                                  |   8 ++
 gdb/ada-lang.c                            |   1 +
 gdb/doc/python.texi                       |  24 ++++++
 gdb/dwarf2/read.c                         |   9 ++-
 gdb/gdbtypes.c                            |  24 ++++++
 gdb/gdbtypes.h                            |  16 +++-
 gdb/python/lib/gdb/dap/next.py            |  11 ++-
 gdb/python/lib/gdb/dap/scopes.py          |   4 +
 gdb/python/lib/gdb/printing.py            |  26 ++++++-
 gdb/python/py-type.c                      |  57 ++++++++++++++
 gdb/python/py-value.c                     |  40 ++++++++++
 gdb/rust-lang.c                           |  74 +++++++++++++++---
 gdb/rust-lang.h                           |  39 ++--------
 gdb/testsuite/gdb.dap/ada-arrays.exp      | 123 ++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.dap/ada-arrays/cstuff.c |  22 ++++++
 gdb/testsuite/gdb.dap/ada-arrays/main.adb |  24 ++++++
 gdb/testsuite/gdb.dap/ada-arrays/pck.adb  |  21 +++++
 gdb/testsuite/gdb.dap/ada-arrays/pck.ads  |  51 +++++++++++++
 gdb/testsuite/gdb.dap/rust-slices.exp     | 119 +++++++++++++++++++++++++++++
 gdb/testsuite/gdb.dap/rust-slices.rs      |  29 +++++++
 gdb/valarith.c                            |  21 +++++
 gdb/value.h                               |   4 +
 22 files changed, 699 insertions(+), 48 deletions(-)
---
base-commit: 8032f75b2994816e87e9d2ab7c46ad86601c999b
change-id: 20230822-array-and-string-like-f2a941d78802

Best regards,
-- 
Tom Tromey <tromey@adacore.com>



More information about the Gdb-patches mailing list