Enabling logging

Hello Developers,

I'm trying to use the LLDB API for some experimentation. It seems that
there are a lot of functions that contain logging statements such as

SBTarget::Launch (SBLaunchInfo &sb_launch_info, SBError& error)
    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));

    SBProcess sb_process;
    TargetSP target_sp(GetSP());

    if (log)
        log->Printf ("SBTarget(%p)::Launch (launch_info, error)...",

I'd like to enable them. So far, I've not been able to find anything
in API/* that would let me do that. SBDebugger::EnableLog didn't help.

Would you point me in the right direction, please?


EnableLog is the right api, but you have to pass a callback to the SBDebugger constructor to actually get the log callbacks.

char* val[2] = { "all", NULL };
debugger.EnableLog("lldb", val);

for example gives a massive amount of log info.

(lldb) log enable lldb api

The "lldb" is the log channel and "api" is one of many log categories available in the "lldb" channel.

To see all of the channels and their respective categories you can do:

(lldb) log list

Through the API you can do:

debugger.EnableLog("lldb", ["api"])

Thank you for your responses. I've gotten some extra output but not
much at all. This is how I'm doing it:

            SBDebugger debugger = SBDebugger::Create();
            char* val[3] = { "api", "all", NULL };
            debugger.EnableLog("lldb", (const char**)val);
            debugger.SetLoggingCallback(log_cb, NULL);

The only this I get out is this line when I improperly kill the application:

           Went to stop the private state thread, but it was already
invalid.Went to stop the private state thread, but it was already


You might just try:

debugger.HandleCommand("log enable -f /tmp/log.txt lldb api")