Cast is deprecated because it isn't a real C++ cast. In particular if you cast
a pointer to a base class to it's parent class, it doesn't do the work to
offset the pointer to take into account the position of the base class in it's
parent. All it does is extract the address of the original value object and
cast THAT to the new type.
For C & ObjC types, Cast is not going to cause any problems. But for C++ it is
not always correct.
Any of the "evaluate expression" calls with a proper cast expression should
work, clang will get the offsetting right in the code it generates. So for
instance:
casted_value = frame.EvaluateExpression("(MyType *) var_to_cast");
SBFrame::EvaluateExpression will search for types & globally visible objects
searching outward from the current scope. So finding variables & types from
other contexts should only be problem if there are multiple incompatible
types/variables globally visible.
To handle the possible ambiguities here, we need to add some syntax to the
expression parser to indicate "this type/varname from this scope". gdb did
this with:
foo.dylib::varname
which was unfortunate since it collides with C++ and can make entering C++
expressions awkward.
Our tentative plan is to use the "$$" to indicate "names with special sauce"
since we're already using initial $ specially, and then do something like:
$$foo.dylib$varname
to mean the variable called varname in foo.dylib.
Jim
> On Jan 29, 2017, at 8:17 PM, Roman Popov via lldb-dev
> <[email protected]> wrote:
>
> Hello,
>
> SBValue::Cast marked as deprecated in LLDB headers:
>
> // Deprecated - use the expression evaluator to perform type casting
>
> lldb
> ::SBValue Cast(lldb::SBType type);
> But I can't understand how to replace it with expression evaluation.
>
> Suppose I have:
>
> auto casted_val = my_value.Cast(my_type);
> What would be equivalent expression, taking into account that both value and
> type can be out of current scope?
>
>
>
> Same question on stackoverflow:
>
> http://stackoverflow.com/questions/41928915/lldb-api-why-sbvaluecast-is-deprecated-and-how-to-replace-it-with-createvalue
>
>
>
> Thanks in advance for help,
>
> -Roman
>
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev