Cleaned up code that wasn't using the Initialize and Terminate paradigm by

changing it to use it. There was an extra parameter added to the static
accessor global user settings controllers that wasn't needed. A bool was being
used as a parameter to the accessor just so it could be used to clean up 
the global user settings controller which is now fixed by splitting up the
initialization into the "static void Class::Initialize()", access into the
"static UserSettingsControllerSP & Class::GetSettingsController()", and
cleanup into "static void Class::Terminate()".

Also added initialize and terminate calls to the logging code to avoid issues
when LLDB is shutting down. There were cases after the logging was switched
over to use shared pointers where we could crash if the global destructor
chain was being run and it causes the log to be destroyed and any any logging
occurred.

llvm-svn: 119757
This commit is contained in:
Greg Clayton 2010-11-18 23:32:35 +00:00
parent 690fa953e1
commit 99d0faf27e
15 changed files with 237 additions and 183 deletions

View File

@ -247,7 +247,7 @@ public:
}; };
static lldb::UserSettingsControllerSP & static lldb::UserSettingsControllerSP &
GetSettingsController (bool finish = false); GetSettingsController ();
static lldb::DebuggerSP static lldb::DebuggerSP
CreateInstance (); CreateInstance ();

View File

@ -100,6 +100,12 @@ public:
static void static void
ListAllLogChannels (Stream *strm); ListAllLogChannels (Stream *strm);
static void
Initialize ();
static void
Terminate ();
//------------------------------------------------------------------ //------------------------------------------------------------------
// Member functions // Member functions
//------------------------------------------------------------------ //------------------------------------------------------------------

View File

@ -393,8 +393,14 @@ public:
#endif #endif
static lldb::UserSettingsControllerSP static void
GetSettingsController (bool finish = false); Initialize ();
static void
Terminate ();
static lldb::UserSettingsControllerSP &
GetSettingsController ();
void void
UpdateInstanceName (); UpdateInstanceName ();

View File

@ -123,8 +123,14 @@ public:
DISALLOW_COPY_AND_ASSIGN (SettingsController); DISALLOW_COPY_AND_ASSIGN (SettingsController);
}; };
static lldb::UserSettingsControllerSP static void
GetSettingsController (bool finish = false); Initialize ();
static void
Terminate ();
static lldb::UserSettingsControllerSP &
GetSettingsController ();
static ArchSpec static ArchSpec
GetDefaultArchitecture (); GetDefaultArchitecture ();

View File

@ -92,14 +92,14 @@ class Thread :
{ {
public: public:
class ThreadSettingsController : public UserSettingsController class SettingsController : public UserSettingsController
{ {
public: public:
ThreadSettingsController (); SettingsController ();
virtual virtual
~ThreadSettingsController (); ~SettingsController ();
static SettingEntry global_settings_table[]; static SettingEntry global_settings_table[];
static SettingEntry instance_settings_table[]; static SettingEntry instance_settings_table[];
@ -113,7 +113,7 @@ public:
// Class-wide settings. // Class-wide settings.
DISALLOW_COPY_AND_ASSIGN (ThreadSettingsController); DISALLOW_COPY_AND_ASSIGN (SettingsController);
}; };
class RegisterCheckpoint class RegisterCheckpoint
@ -168,8 +168,14 @@ public:
void void
UpdateInstanceName (); UpdateInstanceName ();
static lldb::UserSettingsControllerSP static void
GetSettingsController (bool finish = false); Initialize ();
static void
Terminate ();
static lldb::UserSettingsControllerSP &
GetSettingsController ();
Thread (Process &process, lldb::tid_t tid); Thread (Process &process, lldb::tid_t tid);
virtual ~Thread(); virtual ~Thread();

View File

@ -2452,6 +2452,7 @@
isa = PBXProject; isa = PBXProject;
buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "lldb" */; buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "lldb" */;
compatibilityVersion = "Xcode 3.1"; compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1; hasScannedForEncodings = 1;
knownRegions = ( knownRegions = (
en, en,

View File

@ -52,12 +52,27 @@ GetDebuggerList()
#pragma mark Debugger #pragma mark Debugger
UserSettingsControllerSP &
Debugger::GetSettingsController ()
{
static UserSettingsControllerSP g_settings_controller;
return g_settings_controller;
}
void void
Debugger::Initialize () Debugger::Initialize ()
{ {
if (g_shared_debugger_refcount == 0) if (g_shared_debugger_refcount == 0)
{
lldb_private::Initialize(); lldb_private::Initialize();
UserSettingsControllerSP &usc = GetSettingsController();
usc.reset (new SettingsController);
UserSettingsController::InitializeSettingsController (usc,
SettingsController::global_settings_table,
SettingsController::instance_settings_table);
}
g_shared_debugger_refcount++; g_shared_debugger_refcount++;
} }
void void
@ -68,10 +83,16 @@ Debugger::Terminate ()
g_shared_debugger_refcount--; g_shared_debugger_refcount--;
if (g_shared_debugger_refcount == 0) if (g_shared_debugger_refcount == 0)
{ {
UserSettingsControllerSP &usc = GetSettingsController();
UserSettingsController::FinalizeSettingsController (usc);
usc.reset();
lldb_private::WillTerminate(); lldb_private::WillTerminate();
lldb_private::Terminate(); lldb_private::Terminate();
} }
} }
// Clear our master list of debugger objects
Mutex::Locker locker (GetDebuggerListMutex ());
GetDebuggerList().clear();
} }
DebuggerSP DebuggerSP
@ -144,7 +165,7 @@ Debugger::FindTargetWithProcessID (lldb::pid_t pid)
Debugger::Debugger () : Debugger::Debugger () :
UserID (g_unique_id++), UserID (g_unique_id++),
DebuggerInstanceSettings (*(Debugger::GetSettingsController().get())), DebuggerInstanceSettings (*Debugger::GetSettingsController()),
m_input_comm("debugger.input"), m_input_comm("debugger.input"),
m_input_file (), m_input_file (),
m_output_file (), m_output_file (),
@ -536,29 +557,6 @@ Debugger::FindDebuggerWithID (lldb::user_id_t id)
return debugger_sp; return debugger_sp;
} }
lldb::UserSettingsControllerSP &
Debugger::GetSettingsController (bool finish)
{
static lldb::UserSettingsControllerSP g_settings_controller (new SettingsController);
static bool initialized = false;
if (!initialized)
{
initialized = UserSettingsController::InitializeSettingsController (g_settings_controller,
Debugger::SettingsController::global_settings_table,
Debugger::SettingsController::instance_settings_table);
}
if (finish)
{
UserSettingsControllerSP parent = g_settings_controller->GetParent();
if (parent)
parent->RemoveChild (g_settings_controller);
g_settings_controller.reset();
}
return g_settings_controller;
}
static void static void
TestPromptFormats (StackFrame *frame) TestPromptFormats (StackFrame *frame)
{ {
@ -1261,7 +1259,7 @@ Debugger::SettingsController::~SettingsController ()
lldb::InstanceSettingsSP lldb::InstanceSettingsSP
Debugger::SettingsController::CreateInstanceSettings (const char *instance_name) Debugger::SettingsController::CreateInstanceSettings (const char *instance_name)
{ {
DebuggerInstanceSettings *new_settings = new DebuggerInstanceSettings (*(Debugger::GetSettingsController().get()), DebuggerInstanceSettings *new_settings = new DebuggerInstanceSettings (*Debugger::GetSettingsController(),
false, instance_name); false, instance_name);
lldb::InstanceSettingsSP new_settings_sp (new_settings); lldb::InstanceSettingsSP new_settings_sp (new_settings);
return new_settings_sp; return new_settings_sp;
@ -1306,7 +1304,7 @@ DebuggerInstanceSettings::DebuggerInstanceSettings
} }
DebuggerInstanceSettings::DebuggerInstanceSettings (const DebuggerInstanceSettings &rhs) : DebuggerInstanceSettings::DebuggerInstanceSettings (const DebuggerInstanceSettings &rhs) :
InstanceSettings (*(Debugger::GetSettingsController().get()), CreateInstanceName ().AsCString()), InstanceSettings (*Debugger::GetSettingsController(), CreateInstanceName ().AsCString()),
m_prompt (rhs.m_prompt), m_prompt (rhs.m_prompt),
m_frame_format (rhs.m_frame_format), m_frame_format (rhs.m_frame_format),
m_thread_format (rhs.m_thread_format), m_thread_format (rhs.m_thread_format),

View File

@ -389,7 +389,7 @@ Log::DisableAllLogChannels (Stream *feedback_strm)
{ {
CallbackMap &callback_map = GetCallbackMap (); CallbackMap &callback_map = GetCallbackMap ();
CallbackMapIter pos, end = callback_map.end(); CallbackMapIter pos, end = callback_map.end();
Args args ("all"); Args args;
for (pos = callback_map.begin(); pos != end; ++pos) for (pos = callback_map.begin(); pos != end; ++pos)
pos->second.disable (args, feedback_strm); pos->second.disable (args, feedback_strm);
@ -400,6 +400,19 @@ Log::DisableAllLogChannels (Stream *feedback_strm)
channel_pos->second->Disable (args, feedback_strm); channel_pos->second->Disable (args, feedback_strm);
} }
void
Log::Initialize()
{
Log::Callbacks log_callbacks = { DisableLog, EnableLog, ListLogCategories };
Log::RegisterLogChannel ("lldb", log_callbacks);
}
void
Log::Terminate ()
{
DisableAllLogChannels (NULL);
}
void void
Log::ListAllLogChannels (Stream *strm) Log::ListAllLogChannels (Stream *strm)
{ {

View File

@ -48,29 +48,33 @@ ProcessMacOSXLog::DisableLog (Args &args, Stream *feedback_strm)
LogSP log (GetLog ()); LogSP log (GetLog ());
if (log) if (log)
{ {
uint32_t flag_bits = log->GetMask().Get(); uint32_t flag_bits = 0;
const size_t argc = args.GetArgumentCount (); const size_t argc = args.GetArgumentCount ();
for (size_t i = 0; i < argc; ++i) if (argc > 0)
{ {
const char *arg = args.GetArgumentAtIndex (i); flag_bits = log->GetMask().Get();
for (size_t i = 0; i < argc; ++i)
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~PD_LOG_ALL;
else if (::strcasestr (arg, "break") == arg ) flag_bits &= ~PD_LOG_BREAKPOINTS;
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~PD_LOG_DEFAULT;
else if (::strcasestr (arg, "exc") == arg ) flag_bits &= ~PD_LOG_EXCEPTIONS;
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~PD_LOG_MEMORY;
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~PD_LOG_MEMORY_DATA_SHORT;
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~PD_LOG_MEMORY_DATA_LONG;
else if (::strcasecmp (arg, "protections")== 0 ) flag_bits &= ~PD_LOG_PROCESS;
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~PD_LOG_STEP;
else if (::strcasecmp (arg, "task") == 0 ) flag_bits &= ~PD_LOG_TASK;
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~PD_LOG_THREAD;
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~PD_LOG_VERBOSE;
else if (::strcasestr (arg, "watch") == arg ) flag_bits &= ~PD_LOG_WATCHPOINTS;
else
{ {
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg); const char *arg = args.GetArgumentAtIndex (i);
ListLogCategories (feedback_strm);
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~PD_LOG_ALL;
else if (::strcasestr (arg, "break") == arg ) flag_bits &= ~PD_LOG_BREAKPOINTS;
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~PD_LOG_DEFAULT;
else if (::strcasestr (arg, "exc") == arg ) flag_bits &= ~PD_LOG_EXCEPTIONS;
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~PD_LOG_MEMORY;
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~PD_LOG_MEMORY_DATA_SHORT;
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~PD_LOG_MEMORY_DATA_LONG;
else if (::strcasecmp (arg, "protections")== 0 ) flag_bits &= ~PD_LOG_PROCESS;
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~PD_LOG_STEP;
else if (::strcasecmp (arg, "task") == 0 ) flag_bits &= ~PD_LOG_TASK;
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~PD_LOG_THREAD;
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~PD_LOG_VERBOSE;
else if (::strcasestr (arg, "watch") == arg ) flag_bits &= ~PD_LOG_WATCHPOINTS;
else
{
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
ListLogCategories (feedback_strm);
}
} }
} }
if (flag_bits == 0) if (flag_bits == 0)

View File

@ -48,33 +48,38 @@ ProcessGDBRemoteLog::DisableLog (Args &args, Stream *feedback_strm)
LogSP log (GetLog ()); LogSP log (GetLog ());
if (log) if (log)
{ {
uint32_t flag_bits = log->GetMask().Get(); uint32_t flag_bits = 0;
const size_t argc = args.GetArgumentCount (); const size_t argc = args.GetArgumentCount ();
for (size_t i = 0; i < argc; ++i) if (argc > 0)
{ {
const char *arg = args.GetArgumentAtIndex (i); flag_bits = log->GetMask().Get();
for (size_t i = 0; i < argc; ++i)
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~GDBR_LOG_ALL;
else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~GDBR_LOG_ASYNC;
else if (::strcasestr (arg, "break") == arg ) flag_bits &= ~GDBR_LOG_BREAKPOINTS;
else if (::strcasestr (arg, "comm") == arg ) flag_bits &= ~GDBR_LOG_COMM;
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~GDBR_LOG_DEFAULT;
else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~GDBR_LOG_PACKETS;
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY;
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY_DATA_SHORT;
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY_DATA_LONG;
else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~GDBR_LOG_PROCESS;
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~GDBR_LOG_STEP;
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~GDBR_LOG_THREAD;
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~GDBR_LOG_VERBOSE;
else if (::strcasestr (arg, "watch") == arg ) flag_bits &= ~GDBR_LOG_WATCHPOINTS;
else
{ {
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg); const char *arg = args.GetArgumentAtIndex (i);
ListLogCategories (feedback_strm);
if (::strcasecmp (arg, "all") == 0 ) flag_bits &= ~GDBR_LOG_ALL;
else if (::strcasecmp (arg, "async") == 0 ) flag_bits &= ~GDBR_LOG_ASYNC;
else if (::strcasestr (arg, "break") == arg ) flag_bits &= ~GDBR_LOG_BREAKPOINTS;
else if (::strcasestr (arg, "comm") == arg ) flag_bits &= ~GDBR_LOG_COMM;
else if (::strcasecmp (arg, "default") == 0 ) flag_bits &= ~GDBR_LOG_DEFAULT;
else if (::strcasecmp (arg, "packets") == 0 ) flag_bits &= ~GDBR_LOG_PACKETS;
else if (::strcasecmp (arg, "memory") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY;
else if (::strcasecmp (arg, "data-short") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY_DATA_SHORT;
else if (::strcasecmp (arg, "data-long") == 0 ) flag_bits &= ~GDBR_LOG_MEMORY_DATA_LONG;
else if (::strcasecmp (arg, "process") == 0 ) flag_bits &= ~GDBR_LOG_PROCESS;
else if (::strcasecmp (arg, "step") == 0 ) flag_bits &= ~GDBR_LOG_STEP;
else if (::strcasecmp (arg, "thread") == 0 ) flag_bits &= ~GDBR_LOG_THREAD;
else if (::strcasecmp (arg, "verbose") == 0 ) flag_bits &= ~GDBR_LOG_VERBOSE;
else if (::strcasestr (arg, "watch") == arg ) flag_bits &= ~GDBR_LOG_WATCHPOINTS;
else
{
feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
ListLogCategories (feedback_strm);
}
} }
} }
if (flag_bits == 0) if (flag_bits == 0)

View File

@ -2237,26 +2237,29 @@ Process::PopProcessInputReader ()
m_target.GetDebugger().PopInputReader (m_process_input_reader); m_target.GetDebugger().PopInputReader (m_process_input_reader);
} }
lldb::UserSettingsControllerSP
Process::GetSettingsController (bool finish) void
Process::Initialize ()
{ {
static UserSettingsControllerSP g_settings_controller (new SettingsController); UserSettingsControllerSP &usc = GetSettingsController();
static bool initialized = false; usc.reset (new SettingsController);
UserSettingsController::InitializeSettingsController (usc,
SettingsController::global_settings_table,
SettingsController::instance_settings_table);
}
if (!initialized) void
{ Process::Terminate ()
initialized = UserSettingsController::InitializeSettingsController (g_settings_controller, {
Process::SettingsController::global_settings_table, UserSettingsControllerSP &usc = GetSettingsController();
Process::SettingsController::instance_settings_table); UserSettingsController::FinalizeSettingsController (usc);
} usc.reset();
}
if (finish)
{
UserSettingsController::FinalizeSettingsController (g_settings_controller);
g_settings_controller.reset();
initialized = false;
}
UserSettingsControllerSP &
Process::GetSettingsController ()
{
static UserSettingsControllerSP g_settings_controller;
return g_settings_controller; return g_settings_controller;
} }

View File

@ -769,26 +769,28 @@ Target::GetScratchClangASTContext()
return m_scratch_ast_context_ap.get(); return m_scratch_ast_context_ap.get();
} }
lldb::UserSettingsControllerSP void
Target::GetSettingsController (bool finish) Target::Initialize ()
{ {
static lldb::UserSettingsControllerSP g_settings_controller (new SettingsController); UserSettingsControllerSP &usc = GetSettingsController();
static bool initialized = false; usc.reset (new SettingsController);
UserSettingsController::InitializeSettingsController (usc,
SettingsController::global_settings_table,
SettingsController::instance_settings_table);
}
if (!initialized) void
{ Target::Terminate ()
initialized = UserSettingsController::InitializeSettingsController (g_settings_controller, {
Target::SettingsController::global_settings_table, UserSettingsControllerSP &usc = GetSettingsController();
Target::SettingsController::instance_settings_table); UserSettingsController::FinalizeSettingsController (usc);
} usc.reset();
}
if (finish)
{
UserSettingsController::FinalizeSettingsController (g_settings_controller);
g_settings_controller.reset();
initialized = false;
}
UserSettingsControllerSP &
Target::GetSettingsController ()
{
static UserSettingsControllerSP g_settings_controller;
return g_settings_controller; return g_settings_controller;
} }

View File

@ -930,26 +930,29 @@ Thread::GetSP ()
return m_process.GetThreadList().GetThreadSPForThreadPtr(this); return m_process.GetThreadList().GetThreadSPForThreadPtr(this);
} }
lldb::UserSettingsControllerSP
Thread::GetSettingsController (bool finish) void
Thread::Initialize ()
{ {
static UserSettingsControllerSP g_settings_controller (new ThreadSettingsController); UserSettingsControllerSP &usc = GetSettingsController();
static bool initialized = false; usc.reset (new SettingsController);
UserSettingsController::InitializeSettingsController (usc,
SettingsController::global_settings_table,
SettingsController::instance_settings_table);
}
if (!initialized) void
{ Thread::Terminate ()
initialized = UserSettingsController::InitializeSettingsController (g_settings_controller, {
Thread::ThreadSettingsController::global_settings_table, UserSettingsControllerSP &usc = GetSettingsController();
Thread::ThreadSettingsController::instance_settings_table); UserSettingsController::FinalizeSettingsController (usc);
} usc.reset();
}
if (finish)
{
UserSettingsController::FinalizeSettingsController (g_settings_controller);
g_settings_controller.reset();
initialized = false;
}
UserSettingsControllerSP &
Thread::GetSettingsController ()
{
static UserSettingsControllerSP g_settings_controller;
return g_settings_controller; return g_settings_controller;
} }
@ -1010,24 +1013,24 @@ Thread::RunModeAsCString (lldb::RunMode mode)
return unknown_state_string; return unknown_state_string;
} }
#pragma mark "Thread::ThreadSettingsController" #pragma mark "Thread::SettingsController"
//-------------------------------------------------------------- //--------------------------------------------------------------
// class Thread::ThreadSettingsController // class Thread::SettingsController
//-------------------------------------------------------------- //--------------------------------------------------------------
Thread::ThreadSettingsController::ThreadSettingsController () : Thread::SettingsController::SettingsController () :
UserSettingsController ("thread", Process::GetSettingsController()) UserSettingsController ("thread", Process::GetSettingsController())
{ {
m_default_settings.reset (new ThreadInstanceSettings (*this, false, m_default_settings.reset (new ThreadInstanceSettings (*this, false,
InstanceSettings::GetDefaultName().AsCString())); InstanceSettings::GetDefaultName().AsCString()));
} }
Thread::ThreadSettingsController::~ThreadSettingsController () Thread::SettingsController::~SettingsController ()
{ {
} }
lldb::InstanceSettingsSP lldb::InstanceSettingsSP
Thread::ThreadSettingsController::CreateInstanceSettings (const char *instance_name) Thread::SettingsController::CreateInstanceSettings (const char *instance_name)
{ {
ThreadInstanceSettings *new_settings = new ThreadInstanceSettings (*(Thread::GetSettingsController().get()), ThreadInstanceSettings *new_settings = new ThreadInstanceSettings (*(Thread::GetSettingsController().get()),
false, instance_name); false, instance_name);
@ -1218,11 +1221,11 @@ ThreadInstanceSettings::GetTraceThreadVarName ()
} }
//-------------------------------------------------- //--------------------------------------------------
// ThreadSettingsController Variable Tables // SettingsController Variable Tables
//-------------------------------------------------- //--------------------------------------------------
SettingEntry SettingEntry
Thread::ThreadSettingsController::global_settings_table[] = Thread::SettingsController::global_settings_table[] =
{ {
//{ "var-name", var-type , "default", enum-table, init'd, hidden, "help-text"}, //{ "var-name", var-type , "default", enum-table, init'd, hidden, "help-text"},
{ NULL, eSetVarTypeNone, NULL, NULL, 0, 0, NULL } { NULL, eSetVarTypeNone, NULL, NULL, 0, 0, NULL }
@ -1230,7 +1233,7 @@ Thread::ThreadSettingsController::global_settings_table[] =
SettingEntry SettingEntry
Thread::ThreadSettingsController::instance_settings_table[] = Thread::SettingsController::instance_settings_table[] =
{ {
//{ "var-name", var-type, "default", enum-table, init'd, hidden, "help-text"}, //{ "var-name", var-type, "default", enum-table, init'd, hidden, "help-text"},
{ "step-avoid-regexp", eSetVarTypeString, "", NULL, false, false, "A regular expression defining functions step-in won't stop in." }, { "step-avoid-regexp", eSetVarTypeString, "", NULL, false, false, "A regular expression defining functions step-in won't stop in." },

View File

@ -101,43 +101,46 @@ void
lldb_private::DisableLog (Args &args, Stream *feedback_strm) lldb_private::DisableLog (Args &args, Stream *feedback_strm)
{ {
LogSP log(GetLog ()); LogSP log(GetLog ());
uint32_t flag_bits;
if (log) if (log)
{ {
flag_bits = log->GetMask().Get(); uint32_t flag_bits = 0;
const size_t argc = args.GetArgumentCount (); const size_t argc = args.GetArgumentCount ();
for (size_t i = 0; i < argc; ++i) if (argc > 0)
{ {
const char *arg = args.GetArgumentAtIndex (i); flag_bits = log->GetMask().Get();
for (size_t i = 0; i < argc; ++i)
if (strcasecmp(arg, "all") == 0 ) flag_bits &= ~LIBLLDB_LOG_ALL;
else if (strcasecmp(arg, "api") == 0) flag_bits &= ~LIBLLDB_LOG_API;
else if (strcasestr(arg, "break") == arg) flag_bits &= ~LIBLLDB_LOG_BREAKPOINTS;
else if (strcasecmp(arg, "default") == 0 ) flag_bits &= ~LIBLLDB_LOG_DEFAULT;
else if (strcasecmp(arg, "dyld") == 0 ) flag_bits &= ~LIBLLDB_LOG_DYNAMIC_LOADER;
else if (strcasestr(arg, "event") == arg) flag_bits &= ~LIBLLDB_LOG_EVENTS;
else if (strcasestr(arg, "expr") == arg) flag_bits &= ~LIBLLDB_LOG_EXPRESSIONS;
else if (strcasestr(arg, "object") == arg) flag_bits &= ~LIBLLDB_LOG_OBJECT;
else if (strcasecmp(arg, "process") == 0 ) flag_bits &= ~LIBLLDB_LOG_PROCESS;
else if (strcasecmp(arg, "script") == 0) flag_bits &= ~LIBLLDB_LOG_SCRIPT;
else if (strcasecmp(arg, "state") == 0 ) flag_bits &= ~LIBLLDB_LOG_STATE;
else if (strcasecmp(arg, "step") == 0 ) flag_bits &= ~LIBLLDB_LOG_STEP;
else if (strcasecmp(arg, "thread") == 0 ) flag_bits &= ~LIBLLDB_LOG_THREAD;
else if (strcasecmp(arg, "verbose") == 0 ) flag_bits &= ~LIBLLDB_LOG_VERBOSE;
else if (strcasestr(arg, "watch") == arg) flag_bits &= ~LIBLLDB_LOG_WATCHPOINTS;
else if (strcasestr(arg, "temp") == arg) flag_bits &= ~LIBLLDB_LOG_TEMPORARY;
else if (strcasestr(arg, "comm") == arg) flag_bits &= ~LIBLLDB_LOG_COMMUNICATION;
else if (strcasestr(arg, "conn") == arg) flag_bits &= ~LIBLLDB_LOG_CONNECTION;
else if (strcasestr(arg, "host") == arg) flag_bits &= ~LIBLLDB_LOG_HOST;
else if (strcasestr(arg, "unwind") == arg) flag_bits &= ~LIBLLDB_LOG_UNWIND;
else
{ {
feedback_strm->Printf ("error: unrecognized log category '%s'\n", arg); const char *arg = args.GetArgumentAtIndex (i);
ListLogCategories (feedback_strm);
return; if (strcasecmp(arg, "all") == 0 ) flag_bits &= ~LIBLLDB_LOG_ALL;
else if (strcasecmp(arg, "api") == 0) flag_bits &= ~LIBLLDB_LOG_API;
else if (strcasestr(arg, "break") == arg) flag_bits &= ~LIBLLDB_LOG_BREAKPOINTS;
else if (strcasecmp(arg, "default") == 0 ) flag_bits &= ~LIBLLDB_LOG_DEFAULT;
else if (strcasecmp(arg, "dyld") == 0 ) flag_bits &= ~LIBLLDB_LOG_DYNAMIC_LOADER;
else if (strcasestr(arg, "event") == arg) flag_bits &= ~LIBLLDB_LOG_EVENTS;
else if (strcasestr(arg, "expr") == arg) flag_bits &= ~LIBLLDB_LOG_EXPRESSIONS;
else if (strcasestr(arg, "object") == arg) flag_bits &= ~LIBLLDB_LOG_OBJECT;
else if (strcasecmp(arg, "process") == 0 ) flag_bits &= ~LIBLLDB_LOG_PROCESS;
else if (strcasecmp(arg, "script") == 0) flag_bits &= ~LIBLLDB_LOG_SCRIPT;
else if (strcasecmp(arg, "state") == 0 ) flag_bits &= ~LIBLLDB_LOG_STATE;
else if (strcasecmp(arg, "step") == 0 ) flag_bits &= ~LIBLLDB_LOG_STEP;
else if (strcasecmp(arg, "thread") == 0 ) flag_bits &= ~LIBLLDB_LOG_THREAD;
else if (strcasecmp(arg, "verbose") == 0 ) flag_bits &= ~LIBLLDB_LOG_VERBOSE;
else if (strcasestr(arg, "watch") == arg) flag_bits &= ~LIBLLDB_LOG_WATCHPOINTS;
else if (strcasestr(arg, "temp") == arg) flag_bits &= ~LIBLLDB_LOG_TEMPORARY;
else if (strcasestr(arg, "comm") == arg) flag_bits &= ~LIBLLDB_LOG_COMMUNICATION;
else if (strcasestr(arg, "conn") == arg) flag_bits &= ~LIBLLDB_LOG_CONNECTION;
else if (strcasestr(arg, "host") == arg) flag_bits &= ~LIBLLDB_LOG_HOST;
else if (strcasestr(arg, "unwind") == arg) flag_bits &= ~LIBLLDB_LOG_UNWIND;
else
{
feedback_strm->Printf ("error: unrecognized log category '%s'\n", arg);
ListLogCategories (feedback_strm);
return;
}
} }
} }
if (flag_bits == 0) if (flag_bits == 0)
GetLog ().reset(); GetLog ().reset();

View File

@ -57,12 +57,13 @@ lldb_private::Initialize ()
if (!g_inited) if (!g_inited)
{ {
g_inited = true; g_inited = true;
Log::Initialize();
Timer::Initialize (); Timer::Initialize ();
Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);
Log::Callbacks log_callbacks = { DisableLog, EnableLog, ListLogCategories }; Target::Initialize ();
Process::Initialize ();
Log::RegisterLogChannel ("lldb", log_callbacks); Thread::Initialize ();
DisassemblerLLVM::Initialize(); DisassemblerLLVM::Initialize();
ObjectContainerBSDArchive::Initialize(); ObjectContainerBSDArchive::Initialize();
ObjectFileELF::Initialize(); ObjectFileELF::Initialize();
@ -86,10 +87,6 @@ lldb_private::Initialize ()
//ProcessMacOSX::Initialize(); //ProcessMacOSX::Initialize();
SymbolVendorMacOSX::Initialize(); SymbolVendorMacOSX::Initialize();
#endif #endif
Debugger::GetSettingsController (false);
Target::GetSettingsController (false);
Process::GetSettingsController (false);
Thread::GetSettingsController (false);
#ifdef __linux__ #ifdef __linux__
ProcessLinux::Initialize(); ProcessLinux::Initialize();
#endif #endif
@ -128,14 +125,15 @@ lldb_private::Terminate ()
SymbolVendorMacOSX::Terminate(); SymbolVendorMacOSX::Terminate();
#endif #endif
Thread::GetSettingsController (true); Thread::Terminate ();
Process::GetSettingsController (true); Process::Terminate ();
Target::GetSettingsController (true); Target::Terminate ();
Debugger::GetSettingsController (true);
#ifdef __linux__ #ifdef __linux__
ProcessLinux::Terminate(); ProcessLinux::Terminate();
#endif #endif
Log::Terminate();
} }
extern "C" const double LLDBVersionNumber; extern "C" const double LLDBVersionNumber;