Yes, I don't think we can remove SBDebugger::Initialize/Terminate, but we could 
document them:

(lldb) script
Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.
>>> help(lldb.SBDebugger.Initialize)
Help on function Initialize in module lldb:

Initialize()
    Initialize()

We could even add lldb::Initialize & Terminate and say in the 
SBDebugger::Initialize & Terminate that we'll get rid of them at some point, so 
use the lldb:: ones instead.

Jim


> On Oct 8, 2014, at 10:16 PM, Matthew Gardiner <m...@csr.com> wrote:
> 
> Thanks Greg,
> 
> Yes, my confusion stemmed from the scoping of the functions.
> 
> It would have been better, as you'd stated, if we'd have got:
> 
> namespace lldb {
>  void Initialize();
>  void Terminate();
> }
> 
> But I appreciate that the C++ API is hard to change. Sorry about
> previous confusion.
> 
> There's a couple of additions I would like to make to the API soon,
> which will benefit the kalimba non-8-bit byte stuff. I'll build test
> cases first and add a review before doing anything drastic first.
> 
> thanks
> Matt
> 
> 
> On Wed, 2014-10-08 at 11:26 -0700, Greg Clayton wrote:
>>> On Oct 7, 2014, at 10:15 PM, Matthew Gardiner <m...@csr.com> wrote:
>>> 
>>> On Tue, 2014-10-07 at 17:10 -0700, Greg Clayton wrote:
>>>> It is quite common for shared libraries to have initialize and terminate 
>>>> calls. We have this in LLDB. 
>>> 
>>> Agreed. Lots of libraries have to initialise resource, then release the
>>> resource upon terminate.
>>> 
>>> But why have an Initialise method when you _already_ have a Create
>>> method? Likewise a Terminate method when you _already_ have a Destroy
>>> method.
>>> 
>>> Surely when a "thing" is created that is also when it is initialised?
>> 
>> You are assuming there is no global context within the debugger like all 
>> registered plug-ins, lists, settings, global module list... These all work 
>> without requiring a debugger object. We could switch things so that all 
>> state is contained in the lldb_private::Debugger object, but then all places 
>> making static function calls would now need to have a debugger object. So 
>> think of SBDebugger::Initialize() more of a LLDB::Initialize() and 
>> SBDebugger::Terminate() as LLDB::Terminate(). We placed it into the 
>> SBDebugger class just for convenience since this is the most senior object 
>> in the hierarchy, but I can see how this is confusing.
>> 
>> 
>>> 
>>>> 
>>>> I would rather not have to look through all API calls that might require 
>>>> LLDB to be initialized and have to possibly manually call 
>>>> SBDebugger::Initialize() in there. The initialization does quite a bit and 
>>>> the assertion quickly should tell you that you must call 
>>>> SBDebugger::Initialize() first. If it isn't clear from the assertion, we 
>>>> can change the assertion to be more descriptive. But again, many other 
>>>> classes in the lldb::SB* API have functions that might be able to be used 
>>>> without having to start with a debugger, so I would rather not have to go 
>>>> through all of the API and add the "init the debugger if not already 
>>>> initialized".
>>>> 
>>>> This also allows you to use LLDB as a shared library and do:
>>>> 
>>>> SBDebugger::Initialize()
>>>> // Do something that takes up a bunch of memory
>>>> SBDebugger::Terminate()
>>>> 
>>> 
>>> Agreed. But surely in between the invocations of Initialise and
>>> Terminate, you have in some sense "created" an instance of an
>>> SBDebugger?
>> 
>> No that isn't required. There are other API calls you might be able to use 
>> (not many). Repeating what I stated above: 
>> SBDebugger::Initialize()/Terminate() are more really like LLDB::Initialize() 
>> and LLDB::Terminate(), so these calls are really things that populate all 
>> shared library globals.
>>> 
>>> 
>>>> So I vote to leave things as is.
>>>> 
>>> 
>>> To avoid rocking the boat, I reluctantly concede.
>> 
>> Since we already have this in the SBDebugger public API I would rather not 
>> change it, but it would be probably clearer if we had:
>> 
>> namespace lldb {
>>    void Initialize();  // Must be called prior to calling any other lldb::SB 
>> API calls
>>    void Terminate(); // No lldb::SB API calls should be called after calling 
>> this and before calling lldb::Initialize() again
>> }
>> 
>> Does that help explain what SBDebugger::Initialize() and 
>> SBDebugger::Terminate() actually are despite the wrong class scoping?
>> 
>> Greg
>> 
>> 
>> 
>> 
>> To report this email as spam click 
>> https://www.mailcontrol.com/sr/MZbqvYs5QwJvpeaetUwhCQ== .
> 
> 
> 
> 
> Member of the CSR plc group of companies. CSR plc registered in England and 
> Wales, registered number 4187346, registered office Churchill House, 
> Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
> More information can be found at www.csr.com. Keep up to date with CSR on our 
> technical blog, www.csr.com/blog, CSR people blog, www.csr.com/people, 
> YouTube, www.youtube.com/user/CSRplc, Facebook, 
> www.facebook.com/pages/CSR/191038434253534, or follow us on Twitter at 
> www.twitter.com/CSR_plc.
> New for 2014, you can now access the wide range of products powered by aptX 
> at www.aptx.com.
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to