> On Feb 28, 2018, at 9:27 PM, Jim Ingham <jing...@apple.com> wrote:
> 
> Interesting.  
> 
> First off, you can turn off fetching dynamic values globally (including in 
> the Xcode Locals view) by putting:
> 
> settings set target.prefer-dynamic-value no-dynamic-values

> in your ~/.lldbinit file.  You can toggle this on and off in a session, 
> though Xcode won't notice you've changed the value till you cause it to 
> refresh the locals (step or whatever).

This will fix the output of "frame variable". But it does not seem to fix the 
variable display in the UI.

> We do log the process of finding the dynamic type.  You can see this by 
> running the command:
> 
> log enable -f /tmp/lldb-object-log.txt lldb object
> 
> Probably easiest to put that in your .lldbinit.
> 
> That channel also logs when we read in modules, and so it might be a little 
> chatty, but you should see:
> 
> <SOME_ADDRESS>: static-type = '<STATIC_TYPE>' has vtable symbol 'vtable for 
> <DYNAMIC_CLASS>'
> 
> and then some more messages that trace our attempt to look up DYNAMIC CLASS.  
> If you turn on those logs, what do you see for these classes?

0x000000010f62ecd0: static-type = 'Transform *' has vtable symbol 'vtable for 
Transform'

0x000000010f62ecd0: static-type = 'Transform *' has dynamic type: 
uid={0x100012d7a}, type-name='Transform'

jonas

> 
> Jim
> 
> 
>> On Feb 28, 2018, at 12:03 PM, jonas echterhoff <jo...@unity3d.com> wrote:
>> 
>> 
>> 
>>> On Feb 28, 2018, at 7:14 PM, Jim Ingham <jing...@apple.com> wrote:
>>> 
>>> Jonas,
>>> 
>>> What are you using to inspect the this pointer?
>> 
>> Normally, the Xcode debugger UI.
>> 
>>> You can use "frame variable" (the equivalent of gdb's "info locals") which 
>>> just relies on debug info or the expression evaluator e.g. "print".  Do 
>>> both methods show the same problem?
>> 
>> (lldb) frame variable this
>> (Scripting::UnityEngine::Transform *) this = 0x000000010fe2eb20
>> 
>> That gives me the wrong namespace
>> 
>> (lldb) print this
>> (Scripting::UnityEngine::Transform *) $4 = 0x000000010fe2eb20
>> 
>> That also gives me the wrong namespace
>> 
>> But:
>> 
>> (lldb) print *this
>> (Transform) $5 = {
>> [...]
>> 
>> gives me the correct (global) namespace.
>> 
>> Also:
>> 
>> (lldb) frame variable -d no-dynamic-values this
>> (Transform *) this = 0x000000010fe2eb20
>> 
>> gives me the correct namespace.
>> 
>>> 
>>> Also note that lldb by default will try to discern the full dynamic type of 
>>> the variables it prints.  You can disable this by doing:
>>> 
>>> (lldb) expr -d no-dynamic-values -- this
>>> 
>>> or equivalently:
>>> 
>>> (lldb) frame variable -d no-dynamic-values this
>>> 
>>> Is it the dynamic value resolution that's causing the incorrect printing?
>> 
>> Yes, both of those above give me the correct types!
>> 
>> Now, this is already very helpful - Thank you! 
>> This means I can get correct values using the lldb console. If there was 
>> some way to make the Xcode UI show the correct values, that would be even 
>> better.
>> 
>> jonas
>> 
>>> 
>>> Jim
>>> 
>>> 
>>> 
>>> 
>>>> On Feb 28, 2018, at 3:03 AM, jonas echterhoff via lldb-dev 
>>>> <lldb-dev@lists.llvm.org> wrote:
>>>> 
>>>> 
>>>>> On Feb 28, 2018, at 11:19 AM, Dmitry Antipov <danti...@nvidia.com> wrote:
>>>>> 
>>>>> On 02/28/2018 11:31 AM, jonas echterhoff via lldb-dev wrote:
>>>>> 
>>>>>> I'm using lldb-900.0.64.
>>>>>        ^^^^^^^^^^^^^^
>>>>>        ??????????????
>>>>> Latest official release is 5.0.1; also there are 6.0.0 (at -rc3, the next 
>>>>> release)
>>>>> and 7.0.0 (a.k.a SVN trunk). What's the 'version' output of your LLDB 
>>>>> prompt?
>>>> 
>>>> It is what I posted:
>>>> 
>>>> jechter$ lldb --version
>>>> lldb-900.0.64
>>>> Swift-4.0
>>>> 
>>>> Maybe Apple uses a different versioning scheme for lldb distributed with 
>>>> their toolchains?
>>>>> 
>>>>>> Unfortunately, I have not yet succeeded in coming up with a small, 
>>>>>> independent repro case which shows this problem.
>>>>> 
>>>>> IIUC this is it:
>>>> 
>>>> [...]
>>>> 
>>>>> Here 'this' is different between calls to obj2.f () and obj2.g () 
>>>>> (0x00007fffffffdb50 vs.
>>>>> 0x00007fffffffdb40), and objects are shown as different as well - {111, 
>>>>> 222} vs. {333, 444}.
>>>> 
>>>> Thanks. What you are showing there seems very peculiar. 
>>>> 
>>>> But I don't think it's the same problem as I have (and also, using the 
>>>> same steps on my machine does not repro the problem you showed - I get the 
>>>> same value for "this" and it's members between the calls to S::B::f and 
>>>> S::B::g).
>>>> 
>>>> My problem was not about showing a wrong object (My "this" pointer value 
>>>> was correct), but about showing a wrong type representation of the correct 
>>>> object data.
>>>> 
>>>> jonas
>>>> 
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev@lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>> 
>> 
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to