clayborg wrote:

You also are overwriting the original `lldb.SBValue` with the statement 
`self.valobj = self.valobj.Dereference()` here:
```
    def extract_entries(self):
        if self.valobj.type.is_pointer:
            self.valobj = self.valobj.Dereference()
```
You never want to do this because if your value is a pointer, that pointer can 
change, and now you have replaced the value that is the pointer value with the 
first dereference value and that value will never change. Now when you run this 
function again, you won't get the right value because you will have locked onto 
the first dereferenced pointer. So if you have code like:
```
auto  *int_ptr = &myHash1;
int_ptr = &myHash2;
```
You will always be showing `myHash1` as the value and it will never update. So 
you never touch the original `self. valobj` value as that is always your 
starting point. So lets say `&myHash1` is 0x1000 and `&myHash2` is 0x2000, with 
your code you will always dereference the pointer from 0x1000 and then you 
re-write your `self.valobj` to now always be that reference.

You also don't need to dereference the type. So your `extract_entries` function 
that currently looks like:
```
    def extract_entries(self):
        if self.valobj.type.is_pointer:
            self.valobj = self.valobj.Dereference()
        self.size = 0 if self.valobj.GetChildMemberWithName("size").value is 
None else self.valobj.GetChildMemberWithName("size").unsigned
        self.entries = []
```
Should be:
```
    def update(self):
        self.size = 
self.valobj.GetChildMemberWithName("size").GetValueAsUnsigned(0)
        self.entries = []
```

https://github.com/llvm/llvm-project/pull/117755
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to