In general where you see the event bits defined like SBTarget.h for your case, 
the class that contains the event bit definitions:

class SBTarget
{
public:
    //------------------------------------------------------------------
    // Broadcaster bits.
    //------------------------------------------------------------------
    enum
    {
        eBroadcastBitBreakpointChanged  = (1 << 0),
        eBroadcastBitModulesLoaded      = (1 << 1),
        eBroadcastBitModulesUnloaded    = (1 << 2),
        eBroadcastBitWatchpointChanged  = (1 << 3),
        eBroadcastBitSymbolsLoaded      = (1 << 4)
    };
...


Also contains all of the static functions that can extract data from those 
events:


class SBTarget
{
public:
...
    static bool
    EventIsTargetEvent (const lldb::SBEvent &event);

    static lldb::SBTarget
    GetTargetFromEvent (const lldb::SBEvent &event);
    
    static uint32_t
    GetNumModulesFromEvent (const lldb::SBEvent &event);

    static lldb::SBModule
    GetModuleAtIndexFromEvent (const uint32_t idx, const lldb::SBEvent &event);


Greg Clayton



> On Feb 29, 2016, at 11:59 AM, Jeffrey Tan via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> This is very useful, thanks for the info!
> 
> On Mon, Feb 29, 2016 at 10:36 AM, Jim Ingham <jing...@apple.com> wrote:
> 
>> On Feb 27, 2016, at 8:34 PM, Jeffrey Tan via lldb-dev 
>> <lldb-dev@lists.llvm.org> wrote:
>> 
>> Hi,
>> 
>> I am trying to listen for module/symbol load/unload events and display them 
>> in output UI so that debugger users can have a basic clue what is debugger 
>> busy doing while launching a big executable linking many shared libraries.
>> 
>> Questions:
>> 1. I did not find an API to get current load/unload module during module 
>> events. I was expecting some static API like lldb.SBModule(or 
>> SBTarget).GetModuleFromEvent(SBEvent), but this does not exists. I tried to 
>> treat current PC's module as loading module in module load/unload events. 
>> But that does not work too(I think because process is not stopped in module 
>> load/unload events). Do I miss something here?
> 
> From SBTarget.h:
> 
>     static uint32_t
>     GetNumModulesFromEvent (const lldb::SBEvent &event);
> 
>     static lldb::SBModule
>     GetModuleAtIndexFromEvent (const uint32_t idx, const lldb::SBEvent 
> &event);
> 
> Note, you can also cause the process to stop with modules are loaded with the 
> setting:
> 
> target.process.stop-on-sharedlibrary-events
> 
> if that is more convenient for you.
> 
>> 
>> 2. Even though "image list" shows I have around 42 modules loaded in 
>> process, I only got two module load events. Why is that?
> 
> On OS X the loader loads the closure of modules for whatever it is loading, 
> and only stops and informs the debugger when this is all done.  So it is 
> quite usual to see only a few load events even though many modules get loaded.
> 
> 
>> 
>> 3. Even though I added lldb.SBTarget.eBroadcastBitSymbolsLoaded, there is no 
>> event of type eBroadcastBitSymbolsLoaded generated. Is it expected? 
>> Apparently I have the symbols next to the binary. 
> 
> That event gets sent when symbols are added to an already loaded module.  It 
> is so a UI will know to refresh the backtrace, local variables, source view, 
> etc when code goes from having no symbols to having some symbols.  Those 
> actions are not needed if the library & its symbols get loaded 
> simultaneously, so it isn’t sent in that case.
> 
> Jim
> 
> 
>> 
>> This is tested on mac OSX lldb.
>> 
>> Jeffrey
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

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

Reply via email to