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".

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

Reply via email to