> On Jun 23, 2020, at 12:39 PM, Greg Clayton via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> Here is example code showing what Jim was talking about:
> 
> auto listener = debugger.GetListener();
> const uint32_t target_event_mask = lldb::SBTarget::eBroadcastBitModulesLoaded 
> | lldb::SBTarget::eBroadcastBitModulesUnloaded | ...;
> const uint32_t process_event_mask = 
> lldb::SBProcess::eBroadcastBitStateChanged | ...;
> const uint32_t target_mask = listener.StartListeningForEventClass(debugger, 
> lldb::SBTarget::GetBroadcasterClassName(), target_event_mask);
> const uint32_t process_mask = listener.StartListeningForEventClass(debugger, 
> lldb::SBProcess::GetBroadcasterClassName(), process_event_mask);
> 
> 
> Fill in an extra event mask bits you want where you see "..." and you should 
> be good to go. Note that the return value from 
> SBListener::StartListeningForEventClass(...) will return the actual mask you 
> were able to grab. Some event bits can only be listened to by a single source 
> and if someone else is already listening to this bit, you might not be able 
> to listen to all of the bits you request. So check "target_event_mask" 
> against "target_mask" and "process_event_mask" against "process_mask".

Most particularly, lldb doesn’t currently allow multiple listeners for the 
SBProcess StateChanged event.  If you aren’t the creator of a process, don’t 
listen for this event or things will go poorly.

Jim


> 
> Greg
> 
>> On Jun 23, 2020, at 11:54 AM, Jim Ingham via lldb-dev 
>> <lldb-dev@lists.llvm.org> wrote:
>> 
>> Did you try getting the broadcaster class from SBTarget 
>> (SBTarget::GetBroadcasterClassName) and then in your Listener call 
>> StartListeningForEventClass?
>> 
>> When you listen to an Event Class you get signed up for events for each new 
>> object of that class as it gets created.
>> 
>> Jim
>> 
>> 
>>> On Jun 23, 2020, at 11:43 AM, Derek Selander via lldb-dev 
>>> <lldb-dev@lists.llvm.org> wrote:
>>> 
>>> Forgive me if this was asked in the past. I did some combing through the 
>>> archives with a "site:lists.llvm.org/pipermail/lldb-dev/ plugininitialize | 
>>> Xcode | sbtarget” google query, but didn’t find anything relevant
>>> 
>>> My ultimate goal is to build a helper tool which compliments Xcode when 
>>> debugging something.
>>> 
>>> To do this: I am using the C++ bool lldb::PluginInitialize(lldb::SBDebugger 
>>> dbg) function call to initialize my plugin within LLDB’s process. From 
>>> there, I am spawning a mach XPC anonymous service to coordinate talking 
>>> with my LLDB plugin and a macOS GUI application.  This code is working 
>>> great!
>>> 
>>> 
>>> My problem is that at the time of my code being initialized (via Xcode 
>>> calling into it via XPC), the SBDebugger is valid, but no SBTarget is valid 
>>> (even the dummy one). This means I can not listen for events when the 
>>> process starts up (i.e. SBProcess’s  eBroadCastBitStateChanged), nor 
>>> monitor for any events being from the SBTarget. 
>>> 
>>> Since I am running code inside the LLDB.framework, I can of course do some 
>>> wild and crazy stuff by injecting code to intercept when an SBTarget is 
>>> being created, but I’d really rather avoid that in case you change the 
>>> lldb_private APIs around.  So my question is: do you have a recommended way 
>>> to be notified via code in a LLDB plugin when a target is initialized 
>>> through Xcode? 
>>> 
>>> PS. I’ve read through the examples where a target is created directly via 
>>> the SB APIs, but I can’t use those when Xcode is responsible for launching 
>>> the SBTarget and SBProcess.
>>> 
>>> 
>>> Thanks! Y’all are awesome 
>>> _______________________________________________
>>> lldb-dev mailing list
>>> lldb-dev@lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> 
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev@lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

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

Reply via email to