From 55a32cfe80084e030d5d4d52874c455e50805e64 Mon Sep 17 00:00:00 2001 From: Philip DePetro Date: Tue, 12 May 2026 09:55:14 -0700 Subject: [PATCH] Skip uninitialized __slots__ in variable resolver --- .../pydevd/_pydevd_bundle/pydevd_resolver.py | 2 ++ .../pydevd/tests_python/test_resolvers.py | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py index 20a7351a9..488793c4a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py @@ -190,6 +190,8 @@ def _get_py_dictionary(self, var, names=None, used___dict__=False): name_as_str = "%r" % (name_as_str,) if not used___dict__: + if not hasattr(var, name): + continue attr = getattr(var, name) else: attr = var.__dict__[name] diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py b/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py index 1266caf43..93609c1bf 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py @@ -107,6 +107,28 @@ def __getattribute__(self, attr_name): assert type_name == "MyObject" +def test_object_resolver_empty_slot(): + from _pydevd_bundle.pydevd_resolver import DefaultResolver + + default_resolver = DefaultResolver() + + class MyObject(object): + __slots__ = ["a", "b", "c"] + + def __init__(self): + self.a = 1 + self.c = 3 + + obj = MyObject() + dictionary = default_resolver.get_dictionary(obj) + + dictionary = clear_contents_dictionary(default_resolver.get_dictionary(obj)) + assert dictionary == {"a": 1, "c": 3} + + contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol(default_resolver.get_contents_debug_adapter_protocol(obj)) + assert contents_debug_adapter_protocol == [("a", 1, ".a"), ("c", 3, ".c")] + + def test_object_resolver__dict__non_strings(): from _pydevd_bundle.pydevd_resolver import DefaultResolver