124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- lldb-log.cpp --------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private-log.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1684cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Log.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h" 19ce6fe885c2e30f5ac6e0c787cb571a01f9d41f85Eli Friedman#include <string.h> 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton// We want to avoid global constructors where code needs to be run so here we 26e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton// control access to our static g_log_sp by hiding it in a singleton function 27e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton// that will construct the static g_lob_sp the first time this function is 28e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton// called. 29952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton 30952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Claytonstatic bool g_log_enabled = false; 31952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Claytonstatic Log * g_log = NULL; 32952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Claytonstatic Log * 33e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg ClaytonGetLog () 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 35952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton if (!g_log_enabled) 36952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return NULL; 37952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return g_log; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::GetLogMask () 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 43952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLog ()); 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log) 45f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton return log->GetMask().Get(); 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::IsLogVerbose () 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t mask = GetLogMask(); 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return (mask & LIBLLDB_LOG_VERBOSE); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog * 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::GetLogIfAllCategoriesSet (uint32_t mask) 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 59952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLog ()); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log && mask) 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 62f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton uint32_t log_mask = log->GetMask().Get(); 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if ((log_mask & mask) != mask) 64952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return NULL; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return log; 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::LogIfAllCategoriesSet (uint32_t mask, const char *format, ...) 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 72952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLogIfAllCategoriesSet (mask)); 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log) 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_list args; 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_start (args, format); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log->VAPrintf (format, args); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_end (args); 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::LogIfAnyCategoriesSet (uint32_t mask, const char *format, ...) 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 85952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLogIfAnyCategoriesSet (mask)); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log) 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_list args; 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_start (args, format); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log->VAPrintf (format, args); 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner va_end (args); 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 95952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog * 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::GetLogIfAnyCategoriesSet (uint32_t mask) 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 98952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLog ()); 99f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton if (log && mask && (mask & log->GetMask().Get())) 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return log; 101952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return NULL; 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 1056c530f2201be4788dedf3d5970399220fbd50b11Jim Inghamlldb_private::DisableLog (const char **categories, Stream *feedback_strm) 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 107952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(GetLog ()); 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 109926060e198137f8a64face70455324a8cd4362a5Caroline Tice if (log) 110926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 111990de7bb41d3afec6b789155408ff322187d8682Greg Clayton uint32_t flag_bits = 0; 1126c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham if (categories[0] != NULL) 113926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 114990de7bb41d3afec6b789155408ff322187d8682Greg Clayton flag_bits = log->GetMask().Get(); 1156c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham for (size_t i = 0; categories[i] != NULL; ++i) 116926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 1176c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham const char *arg = categories[i]; 118990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 119d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton if (0 == ::strcasecmp(arg, "all")) flag_bits &= ~LIBLLDB_LOG_ALL; 120d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "api")) flag_bits &= ~LIBLLDB_LOG_API; 121d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "break", 5)) flag_bits &= ~LIBLLDB_LOG_BREAKPOINTS; 122d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "commands")) flag_bits &= ~LIBLLDB_LOG_COMMANDS; 123d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "default")) flag_bits &= ~LIBLLDB_LOG_DEFAULT; 124d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "dyld")) flag_bits &= ~LIBLLDB_LOG_DYNAMIC_LOADER; 125d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "event", 5)) flag_bits &= ~LIBLLDB_LOG_EVENTS; 126d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "expr", 4)) flag_bits &= ~LIBLLDB_LOG_EXPRESSIONS; 127d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "object", 6)) flag_bits &= ~LIBLLDB_LOG_OBJECT; 128d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "process")) flag_bits &= ~LIBLLDB_LOG_PROCESS; 129d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "script")) flag_bits &= ~LIBLLDB_LOG_SCRIPT; 130d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "state")) flag_bits &= ~LIBLLDB_LOG_STATE; 131d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "step")) flag_bits &= ~LIBLLDB_LOG_STEP; 132d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "thread")) flag_bits &= ~LIBLLDB_LOG_THREAD; 1338c6cf432039ef0c4dd2d10f98511438a4c204f4fJason Molenda else if (0 == ::strcasecmp(arg, "target")) flag_bits &= ~LIBLLDB_LOG_TARGET; 134d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "verbose")) flag_bits &= ~LIBLLDB_LOG_VERBOSE; 135d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "watch", 5)) flag_bits &= ~LIBLLDB_LOG_WATCHPOINTS; 136d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "temp", 4)) flag_bits &= ~LIBLLDB_LOG_TEMPORARY; 137d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "comm", 4)) flag_bits &= ~LIBLLDB_LOG_COMMUNICATION; 138d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "conn", 4)) flag_bits &= ~LIBLLDB_LOG_CONNECTION; 139d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "host", 4)) flag_bits &= ~LIBLLDB_LOG_HOST; 140d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "unwind", 6)) flag_bits &= ~LIBLLDB_LOG_UNWIND; 141de4059f2f6a864f5af102a59b56602183b9239bdEnrico Granata else if (0 == ::strncasecmp(arg, "types", 5)) flag_bits &= ~LIBLLDB_LOG_TYPES; 142ed11c1ebc344458c2bc83aa5b0bf6b3d0e2ef987Greg Clayton else if (0 == ::strncasecmp(arg, "symbol", 6)) flag_bits &= ~LIBLLDB_LOG_SYMBOLS; 143f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton else if (0 == ::strncasecmp(arg, "module", 6)) flag_bits &= ~LIBLLDB_LOG_MODULES; 144cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton else if (0 == ::strncasecmp(arg, "mmap", 4)) flag_bits &= ~LIBLLDB_LOG_MMAP; 1458c2c41ebe01681932affbfd5d8fbe582b887bb08Greg Clayton else if (0 == ::strcasecmp(arg, "os")) flag_bits &= ~LIBLLDB_LOG_OS; 146990de7bb41d3afec6b789155408ff322187d8682Greg Clayton else 147990de7bb41d3afec6b789155408ff322187d8682Greg Clayton { 148990de7bb41d3afec6b789155408ff322187d8682Greg Clayton feedback_strm->Printf ("error: unrecognized log category '%s'\n", arg); 149990de7bb41d3afec6b789155408ff322187d8682Greg Clayton ListLogCategories (feedback_strm); 150990de7bb41d3afec6b789155408ff322187d8682Greg Clayton return; 151990de7bb41d3afec6b789155408ff322187d8682Greg Clayton } 152990de7bb41d3afec6b789155408ff322187d8682Greg Clayton 153926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 154926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 155952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton log->GetMask().Reset (flag_bits); 156926060e198137f8a64face70455324a8cd4362a5Caroline Tice if (flag_bits == 0) 157952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log_enabled = false; 158926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 159926060e198137f8a64face70455324a8cd4362a5Caroline Tice 160926060e198137f8a64face70455324a8cd4362a5Caroline Tice return; 161926060e198137f8a64face70455324a8cd4362a5Caroline Tice} 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 163952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog * 1646c530f2201be4788dedf3d5970399220fbd50b11Jim Inghamlldb_private::EnableLog (StreamSP &log_stream_sp, uint32_t log_options, const char **categories, Stream *feedback_strm) 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Try see if there already is a log - that way we can reuse its settings. 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We could reuse the log in toto, but we don't know that the stream is the same. 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t flag_bits; 169952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton if (g_log) 170952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton flag_bits = g_log->GetMask().Get(); 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner flag_bits = 0; 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 174e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton // Now make a new log with this stream if one was provided 175e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton if (log_stream_sp) 176e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton { 177952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton if (g_log) 178952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log->SetStream(log_stream_sp); 179952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton else 180952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log = new Log(log_stream_sp); 181e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton } 182e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton 183952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton if (g_log) 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 1856c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham for (size_t i=0; categories[i] != NULL; ++i) 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 1876c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham const char *arg = categories[i]; 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 189d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton if (0 == ::strcasecmp(arg, "all")) flag_bits |= LIBLLDB_LOG_ALL; 190d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "api")) flag_bits |= LIBLLDB_LOG_API; 191d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "break", 5)) flag_bits |= LIBLLDB_LOG_BREAKPOINTS; 192d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "commands")) flag_bits |= LIBLLDB_LOG_COMMANDS; 193d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "default")) flag_bits |= LIBLLDB_LOG_DEFAULT; 194d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "dyld")) flag_bits |= LIBLLDB_LOG_DYNAMIC_LOADER; 195d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "event", 5)) flag_bits |= LIBLLDB_LOG_EVENTS; 196d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "expr", 4)) flag_bits |= LIBLLDB_LOG_EXPRESSIONS; 197d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "object", 6)) flag_bits |= LIBLLDB_LOG_OBJECT; 198d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "process")) flag_bits |= LIBLLDB_LOG_PROCESS; 199d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "script")) flag_bits |= LIBLLDB_LOG_SCRIPT; 200d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "state")) flag_bits |= LIBLLDB_LOG_STATE; 201d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "step")) flag_bits |= LIBLLDB_LOG_STEP; 202d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "thread")) flag_bits |= LIBLLDB_LOG_THREAD; 2038c6cf432039ef0c4dd2d10f98511438a4c204f4fJason Molenda else if (0 == ::strcasecmp(arg, "target")) flag_bits |= LIBLLDB_LOG_TARGET; 204d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strcasecmp(arg, "verbose")) flag_bits |= LIBLLDB_LOG_VERBOSE; 205d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "watch", 5)) flag_bits |= LIBLLDB_LOG_WATCHPOINTS; 206d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "temp", 4)) flag_bits |= LIBLLDB_LOG_TEMPORARY; 207d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "comm", 4)) flag_bits |= LIBLLDB_LOG_COMMUNICATION; 208d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "conn", 4)) flag_bits |= LIBLLDB_LOG_CONNECTION; 209d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "host", 4)) flag_bits |= LIBLLDB_LOG_HOST; 210d5f76bbe035329cb4270d1462bd052204228af94Greg Clayton else if (0 == ::strncasecmp(arg, "unwind", 6)) flag_bits |= LIBLLDB_LOG_UNWIND; 211de4059f2f6a864f5af102a59b56602183b9239bdEnrico Granata else if (0 == ::strncasecmp(arg, "types", 5)) flag_bits |= LIBLLDB_LOG_TYPES; 212ed11c1ebc344458c2bc83aa5b0bf6b3d0e2ef987Greg Clayton else if (0 == ::strncasecmp(arg, "symbol", 6)) flag_bits |= LIBLLDB_LOG_SYMBOLS; 213f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton else if (0 == ::strncasecmp(arg, "module", 6)) flag_bits |= LIBLLDB_LOG_MODULES; 214cbe61bd26db663fa3036866dc33315c6ffc37910Greg Clayton else if (0 == ::strncasecmp(arg, "mmap", 4)) flag_bits |= LIBLLDB_LOG_MMAP; 2158c2c41ebe01681932affbfd5d8fbe582b887bb08Greg Clayton else if (0 == ::strcasecmp(arg, "os")) flag_bits |= LIBLLDB_LOG_OS; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner feedback_strm->Printf("error: unrecognized log category '%s'\n", arg); 2197aeed48580d388af7c496b9cb95b7ed7e34580cdGreg Clayton ListLogCategories (feedback_strm); 220952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return g_log; 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 224952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log->GetMask().Reset(flag_bits); 225952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log->GetOptions().Reset(log_options); 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 227952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton g_log_enabled = true; 228952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton return g_log; 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::ListLogCategories (Stream *strm) 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner strm->Printf("Logging categories for 'lldb':\n" 236f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " all - turn on all available logging categories\n" 237f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " api - enable logging of API calls and return values\n" 238f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " break - log breakpoints\n" 2398b8a8303efbd6e8c4fa8224428c0c0f02db9d859Andrew Kaylor " commands - log command argument parsing\n" 240f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " default - enable the default set of logging categories for liblldb\n" 241f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " dyld - log shared library related activities\n" 242f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " events - log broadcaster, listener and event queue activities\n" 243f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " expr - log expressions\n" 244f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " object - log object construction/destruction for important objects\n" 245f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " module - log module activities such as when modules are created, detroyed, replaced, and more\n" 246f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " process - log process events and activities\n" 247f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " script - log events about the script interpreter\n" 248f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " state - log private and public process state changes\n" 249f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " step - log step related activities\n" 250f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " symbol - log symbol related issues and warnings\n" 2518c6cf432039ef0c4dd2d10f98511438a4c204f4fJason Molenda " target - log target events and activities\n" 252f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " thread - log thread events and activities\n" 253f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " types - log type system related activities\n" 254f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " unwind - log stack unwind activities\n" 255f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " verbose - enable verbose logging\n" 256f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton " watch - log watchpoint related activities\n"); 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 258