[lldb-dev] Call c/objc functions with the API

Jim Ingham jingham at apple.com
Fri Feb 22 13:56:20 PST 2013


On Feb 22, 2013, at 1:51 PM, Enrico Granata <egranata at apple.com> wrote:

> CallMethod is right for C++, but for ObjC it would be CallSelector. I don’t think ObjC even has the notion of method in its lexicon.

Yeah, the ObjC guys are pretty sloppy about their nomenclature (is it a method, is it a message...)  And the selector defines the method, so I don't think you'd really need two calls.

> 
> Also, dealing with the arguments is going to be tricky.
> Problems I can see at a glance:
> - how do you deal with each SBValue while making the string? expression path? numeric value + a cast? neither way looks perfect at a glance

I don't think you would make up a string.  You would implement this lower down than that, where we are directly populating the "arguments structure" that we are going to call, a la the Clang Functions.  And by the time we get there, we would have the method signature, so we'd know how to interpret the SBValues from the input arguments.

> - for ObjC you need to also extract the “names of the arguments” (i.e. foo:arg1 bar:arg2 baz:arg3), while in C++ (arg1,arg2,arg3) is enough

Again, you would be consing up a call to objc_msgSend with the arguments passed directly, so that would not be an issue.

Jim


> 
> Of course, there are ways around these issues, but I am not sure this is useful enough to warrant the work required to get it right.
> 
> The data formatters need a much more constrained subset of this functionality, so they implement their own wrapper.
> Any special subset should be trivial to implement, the general case looks tricky.
> 
> Enrico Granata
> ✉ egranata@.com
> ✆ 27683
> 
> On Feb 22, 2013, at 12:14 PM, Jim Ingham <jingham at apple.com> wrote:
> 
>> I'm not arguing for this, but you could do a fairly straightforward API like:
>> 
>> SBValue
>> SBValue::CallMethod(const char *methodName, SBValueList arguments);
>> 
>> This would only work if the SBValue was a C++ or ObjC object.  In the ObjC case "methodName" would be the selector, and the value list would have to be in parameter order.  
>> 
>> I can see this being useful, though probably under the covers it would take some work to get it right...
>> 
>> Jim
>> 
>> On Feb 22, 2013, at 11:51 AM, Filipe Cabecinhas <filcab+lldb-dev at gmail.com> wrote:
>> 
>>> I also don't think it should be in the SB layer. There's lots of stuff to deal with (arguments and their types, variable arguments selectors/functions, etc). I think creating an expression is better (maybe we can use clang so one doesn't have to generate an expression string?).
>>> 
>>> Regards,
>>> 
>>>  filipe
>>> 
>>> 
>>> On Fri, Feb 22, 2013 at 10:23 AM, Enrico Granata <egranata at apple.com> wrote:
>>> Currently, no.
>>> You would have to craft your own expression and run it.
>>> 
>>> The C++ data formatters have their own helper functions to do so. You can refer to lldb_private::formatters::ExtractValueFromObjCExpression for an example.
>>> 
>>> I am not sure if this kind of API belongs in the SB layer. Ideas?
>>> 
>>> Enrico Granata
>>> ✉ egranata@.com
>>> ✆ 27683
>>> 
>>> On Feb 22, 2013, at 5:29 AM, Carlo Kok <ck at remobjects.com> wrote:
>>> 
>>>> Does the api expose any way to execute an objc selector a given value (SBValue)?  (for example I have an NSException instance in an SBValue, and want to call "name" on it).
>>>> 
>>>> 
>>>> What about global (c) functions?
>>>> 
>>>> 
>>>> If not the api, how can I do the equivalent with the underlying api?
>>>> 
>>>> 
>>>> Thanks,
>>>> --
>>>> 
>>>> Carlo Kok
>>>> 
>>>> 
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>> 
>>> 
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>> 
>>> 
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>> 
> 





More information about the lldb-dev mailing list