Skip to content

Add LLDB providers for BTreeMap and BTreeSet #140130

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

ede1998
Copy link

@ede1998 ede1998 commented Apr 21, 2025

Fixes #111868.
Still missing debuginfo tests but struggling to get the tests running locally atm.
Will have another look.

@rustbot
Copy link
Collaborator

rustbot commented Apr 21, 2025

r? @Mark-Simulacrum

rustbot has assigned @Mark-Simulacrum.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Apr 21, 2025
@rust-log-analyzer
Copy link
Collaborator

The job mingw-check-tidy failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
info: removing rustup binaries
info: rustup is uninstalled
##[group]Image checksum input
mingw-check-tidy
# We use the ghcr base image because ghcr doesn't have a rate limit
# and the mingw-check-tidy job doesn't cache docker images in CI.
FROM ghcr.io/rust-lang/ubuntu:22.04

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
  g++ \
  make \
---

COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/

# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
           --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
#
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
#    pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#12 2.785 Building wheels for collected packages: reuse
#12 2.786   Building wheel for reuse (pyproject.toml): started
#12 3.002   Building wheel for reuse (pyproject.toml): finished with status 'done'
#12 3.003   Created wheel for reuse: filename=reuse-4.0.3-cp310-cp310-manylinux_2_35_x86_64.whl size=132719 sha256=5bb60f62728aaedff7162745ce743c7f2f55069b3e7f82e6a37d70df455797cc
#12 3.003   Stored in directory: /tmp/pip-ephem-wheel-cache-0s81qy2n/wheels/3d/8d/0a/e0fc6aba4494b28a967ab5eaf951c121d9c677958714e34532
#12 3.006 Successfully built reuse
#12 3.006 Installing collected packages: boolean-py, binaryornot, tomlkit, reuse, python-debian, markupsafe, license-expression, jinja2, chardet, attrs
#12 3.409 Successfully installed attrs-23.2.0 binaryornot-0.4.4 boolean-py-4.0 chardet-5.2.0 jinja2-3.1.4 license-expression-30.3.0 markupsafe-2.1.5 python-debian-0.1.49 reuse-4.0.3 tomlkit-0.13.0
#12 3.409 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#12 3.951 Collecting virtualenv
#12 3.990   Downloading virtualenv-20.30.0-py3-none-any.whl (4.3 MB)
#12 4.092      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 43.4 MB/s eta 0:00:00
#12 4.149 Collecting platformdirs<5,>=3.9.1
#12 4.154   Downloading platformdirs-4.3.7-py3-none-any.whl (18 kB)
#12 4.175 Collecting distlib<1,>=0.3.7
#12 4.178   Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
#12 4.186      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 KB 73.5 MB/s eta 0:00:00
#12 4.223 Collecting filelock<4,>=3.12.2
#12 4.227   Downloading filelock-3.18.0-py3-none-any.whl (16 kB)
#12 4.309 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#12 4.494 Successfully installed distlib-0.3.9 filelock-3.18.0 platformdirs-4.3.7 virtualenv-20.30.0
#12 4.494 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#12 DONE 4.6s

#13 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#13 DONE 0.0s
---
DirectMap4k:      126912 kB
DirectMap2M:     5115904 kB
DirectMap1G:    13631488 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test            --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py,cpp
##[group]Building bootstrap
    Finished `dev` profile [unoptimized] target(s) in 0.05s
##[endgroup]
WARN: currently no CI rustc builds have rustc debug assertions enabled. Please either set `rust.debug-assertions` to `false` if you want to use download CI rustc or set `rust.download-rustc` to `false`.
[TIMING] core::build_steps::tool::LibcxxVersionTool { target: x86_64-unknown-linux-gnu } -- 0.213
---
fmt check
fmt: checked 5982 files
tidy check
tidy: Skipping binary file check, read-only filesystem
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10' and 'venv'
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10' and 'virtualenv'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (25.0.1)
linting python files
All checks passed!
checking python file formatting
Would reformat: /checkout/src/etc/lldb_providers.py
1 file would be reformatted, 25 files already formatted

python formatting does not match! Printing diff:
1 file would be reformatted, 25 files already formatted
--- /checkout/src/etc/lldb_providers.py
+++ /checkout/src/etc/lldb_providers.py
@@ -1175,34 +1175,39 @@
     keys = leaf.GetChildMemberWithName("keys")
     vals = leaf.GetChildMemberWithName("vals")
     length = leaf.GetChildMemberWithName("len").unsigned
-    edges = cast_to_internal(node_ptr).GetChildMemberWithName("edges") if height > 0 else None
+    edges = (
+        cast_to_internal(node_ptr).GetChildMemberWithName("edges")
+        if height > 0
+        else None
+    )
 
     for i in range(length + 1):
         if height > 0:
             child_ptr = unwrap_item_from_array_of_maybe_uninit(edges, i)
             yield from children_of_node(child_ptr, height - 1)
         if i < length:
-           # Avoid "Cannot perform pointer math on incomplete type" on zero-sized arrays.
-           key_type_size = keys.type.size
-           val_type_size = vals.type.size
-           key = (
-               unwrap_item_from_array_of_maybe_uninit(keys, i)
-               if key_type_size > 0
-               else node_ptr.EvaluateExpression("()")
-           )
-           val = (
-               unwrap_item_from_array_of_maybe_uninit(vals, i)
-               if val_type_size > 0
-               else node_ptr.EvaluateExpression("()")
-           )
-           yield key, val
+            # Avoid "Cannot perform pointer math on incomplete type" on zero-sized arrays.
+            key_type_size = keys.type.size
+            val_type_size = vals.type.size
+            key = (
+                unwrap_item_from_array_of_maybe_uninit(keys, i)
+                if key_type_size > 0
+                else node_ptr.EvaluateExpression("()")
+            )
+            val = (
+                unwrap_item_from_array_of_maybe_uninit(vals, i)
+                if val_type_size > 0
+                else node_ptr.EvaluateExpression("()")
+            )
+            yield key, val
+
 
 def strip_till_parentheses(text: str) -> str:
-    start = text.find('(')
-    end = text.find(')')
+    start = text.find("(")
+    end = text.find(")")
     if start == -1 or end == -1:
         return text
-    return text[start: end + 1]
+    return text[start : end + 1]
 
 
 class StdBTreeMapSyntheticProvider:
@@ -1224,14 +1229,10 @@
     def get_child_at_index(self, index: int) -> SBValue:
         key, value = self.items[index]
         if self.show_values:
-           data = key.GetData()
-           assert data.Append(value.GetData()), "Failed to create key value pair"
-           return self.valobj.CreateValueFromData(
-                "[%s]" % index, data, self.pair_type
-           )
-        return self.valobj.CreateValueFromData(
-            "[%s]" % index, key.GetData(), key.type
-        )
+            data = key.GetData()
+            assert data.Append(value.GetData()), "Failed to create key value pair"
+            return self.valobj.CreateValueFromData("[%s]" % index, data, self.pair_type)
+        return self.valobj.CreateValueFromData("[%s]" % index, key.GetData(), key.type)
 
     def update(self) -> bool:
         self.size = self.valobj.GetChildMemberWithName("length").unsigned
@@ -1262,8 +1263,7 @@
         node_ptr = root.GetChildMemberWithName("node")
 
         self.items = [
-            (key, value)
-            for key, value in children_of_node(node_ptr, height.unsigned)
+            (key, value) for key, value in children_of_node(node_ptr, height.unsigned)
         ]
 
         assert len(self.items) == self.size

rerun tidy with `--extra-checks=py:fmt --bless` to reformat Python code
tidy error: checks with external tool 'ruff' failed
some tidy checks failed
Command has failed. Rerun with -v to see more details.
Build completed unsuccessfully in 0:01:44
  local time: Mon Apr 21 20:19:06 UTC 2025
  network time: Mon, 21 Apr 2025 20:19:06 GMT
##[error]Process completed with exit code 1.
Post job cleanup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

No BTreeMap BTreeSet debug visualizers for lldb / macOS
4 participants