CommandObjectLog.cpp revision da26bd203cbb104291b39891febf7481794f205f
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectLog.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 "CommandObjectLog.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private-log.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1884cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Debugger.h" 205f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Log.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h" 2384cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Options.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/RegularExpression.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Timer.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2963094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h" 30705d6782f95a38caa5cddf8dcc32d6b13fab20fcSean Callanan#include "lldb/Interpreter/CommandInterpreter.h" 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/LineTable.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h" 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h" 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolVendor.h" 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogEnable : public CommandObjectParsed 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 51238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogEnable(CommandInterpreter &interpreter) : 52da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 53da26bd203cbb104291b39891febf7481794f205fJim Ingham "log enable", 54da26bd203cbb104291b39891febf7481794f205fJim Ingham "Enable logging for a single log channel.", 55da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL), 56f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 587826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 597826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentEntry arg1; 607826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentEntry arg2; 6143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 627826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentData category_arg; 6343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 6443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 6543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 6643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_repetition = eArgRepeatPlain; 6743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 6843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 697826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice arg1.push_back (channel_arg); 7043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice category_arg.arg_type = eArgTypeLogCategory; 727826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice category_arg.arg_repetition = eArgRepeatPlus; 737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice arg2.push_back (category_arg); 757826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 7643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 777826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice m_arguments.push_back (arg1); 787826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice m_arguments.push_back (arg2); 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogEnable() 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Options * 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetOptions () 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return &m_options; 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 925e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int 935e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// HandleArgumentCompletion (Args &input, 945e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int &cursor_index, 955e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int &cursor_char_position, 965e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// OptionElementVector &opt_element_vector, 975e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int match_start_point, 985e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int max_return_elements, 995e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// bool &word_complete, 1005e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// StringList &matches) 1015e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// { 1025e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// std::string completion_str (input.GetArgumentAtIndex(cursor_index)); 1035e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// completion_str.erase (cursor_char_position); 1045e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// 1055e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// if (cursor_index == 1) 1065e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// { 1075e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// // 1085e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// Log::AutoCompleteChannelName (completion_str.c_str(), matches); 1095e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// } 1105e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// return matches.GetSize(); 1115e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// } 1125e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class CommandOptions : public Options 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 118f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandOptions (CommandInterpreter &interpreter) : 119f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options (interpreter), 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_file (), 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_options (0) 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandOptions () 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 132143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner char short_option = (char) m_getopt_table[option_idx].val; 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (short_option) 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'f': log_file = option_arg; break; 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 't': log_options |= LLDB_LOG_OPTION_THREADSAFE; break; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'v': log_options |= LLDB_LOG_OPTION_VERBOSE; break; 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'g': log_options |= LLDB_LOG_OPTION_DEBUG; break; 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 's': log_options |= LLDB_LOG_OPTION_PREPEND_SEQUENCE; break; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'T': log_options |= LLDB_LOG_OPTION_PREPEND_TIMESTAMP; break; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'p': log_options |= LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD;break; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'n': log_options |= LLDB_LOG_OPTION_PREPEND_THREAD_NAME; break; 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default: 1489c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 156143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_file.clear(); 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_options = 0; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 162b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const OptionDefinition* 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDefinitions () 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return g_option_table; 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Options table: Required for subclasses of Options. 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 170b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton static OptionDefinition g_option_table[]; 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Instance variables to hold the values for command options. 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string log_file; 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t log_options; 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 179da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual bool 180da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 181da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandReturnObject &result) 182da26bd203cbb104291b39891febf7481794f205fJim Ingham { 183da26bd203cbb104291b39891febf7481794f205fJim Ingham if (args.GetArgumentCount() < 2) 184da26bd203cbb104291b39891febf7481794f205fJim Ingham { 185da26bd203cbb104291b39891febf7481794f205fJim Ingham result.AppendErrorWithFormat("%s takes a log channel and one or more log types.\n", m_cmd_name.c_str()); 186da26bd203cbb104291b39891febf7481794f205fJim Ingham } 187da26bd203cbb104291b39891febf7481794f205fJim Ingham else 188da26bd203cbb104291b39891febf7481794f205fJim Ingham { 189da26bd203cbb104291b39891febf7481794f205fJim Ingham std::string channel(args.GetArgumentAtIndex(0)); 190da26bd203cbb104291b39891febf7481794f205fJim Ingham args.Shift (); // Shift off the channel 191da26bd203cbb104291b39891febf7481794f205fJim Ingham bool success = m_interpreter.GetDebugger().EnableLog (channel.c_str(), 192da26bd203cbb104291b39891febf7481794f205fJim Ingham args.GetConstArgumentVector(), 193da26bd203cbb104291b39891febf7481794f205fJim Ingham m_options.log_file.c_str(), 194da26bd203cbb104291b39891febf7481794f205fJim Ingham m_options.log_options, 195da26bd203cbb104291b39891febf7481794f205fJim Ingham result.GetErrorStream()); 196da26bd203cbb104291b39891febf7481794f205fJim Ingham if (success) 197da26bd203cbb104291b39891febf7481794f205fJim Ingham result.SetStatus (eReturnStatusSuccessFinishNoResult); 198da26bd203cbb104291b39891febf7481794f205fJim Ingham else 199da26bd203cbb104291b39891febf7481794f205fJim Ingham result.SetStatus (eReturnStatusFailed); 200da26bd203cbb104291b39891febf7481794f205fJim Ingham } 201da26bd203cbb104291b39891febf7481794f205fJim Ingham return result.Succeeded(); 202da26bd203cbb104291b39891febf7481794f205fJim Ingham } 203da26bd203cbb104291b39891febf7481794f205fJim Ingham 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandOptions m_options; 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 207b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonOptionDefinition 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectLogEnable::CommandOptions::g_option_table[] = 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2104d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "file", 'f', required_argument, NULL, 0, eArgTypeFilename, "Set the destination file to log to."}, 2114d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "threadsafe", 't', no_argument, NULL, 0, eArgTypeNone, "Enable thread safe logging to avoid interweaved log lines." }, 2124d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "verbose", 'v', no_argument, NULL, 0, eArgTypeNone, "Enable verbose logging." }, 2134d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "debug", 'g', no_argument, NULL, 0, eArgTypeNone, "Enable debug logging." }, 2144d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "sequence", 's', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with an increasing integer sequence id." }, 2154d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "timestamp", 'T', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with a timestamp." }, 2164d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "pid-tid", 'p', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with the process and thread ID that generates the log line." }, 2174d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "thread-name",'n', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with the thread name for the thread that generates the log line." }, 2184d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 221da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogDisable : public CommandObjectParsed 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 227238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogDisable(CommandInterpreter &interpreter) : 228da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 229da26bd203cbb104291b39891febf7481794f205fJim Ingham "log disable", 230da26bd203cbb104291b39891febf7481794f205fJim Ingham "Disable one or more log channel categories.", 231da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL) 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2336a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentEntry arg1; 2346a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentEntry arg2; 23543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 2366a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentData category_arg; 23743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 23843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 23943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 2406a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice channel_arg.arg_repetition = eArgRepeatPlain; 24143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 24243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 2436a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice arg1.push_back (channel_arg); 24443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 2456a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice category_arg.arg_type = eArgTypeLogCategory; 2466a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice category_arg.arg_repetition = eArgRepeatPlus; 2476a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice 2486a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice arg2.push_back (category_arg); 2496a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice 25043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 2516a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice m_arguments.push_back (arg1); 2526a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice m_arguments.push_back (arg2); 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogDisable() 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 260da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 262da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 0) 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2689721fe9795f5d34d10e6815902acc38dddd2722bJim Ingham result.AppendErrorWithFormat("%s takes a log channel and one or more log types.\n", m_cmd_name.c_str()); 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 272926060e198137f8a64face70455324a8cd4362a5Caroline Tice Log::Callbacks log_callbacks; 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 274926060e198137f8a64face70455324a8cd4362a5Caroline Tice std::string channel(args.GetArgumentAtIndex(0)); 275926060e198137f8a64face70455324a8cd4362a5Caroline Tice args.Shift (); // Shift off the channel 276926060e198137f8a64face70455324a8cd4362a5Caroline Tice if (Log::GetLogChannelCallbacks (channel.c_str(), log_callbacks)) 277926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 2786c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham log_callbacks.disable (args.GetConstArgumentVector(), &result.GetErrorStream()); 279926060e198137f8a64face70455324a8cd4362a5Caroline Tice result.SetStatus(eReturnStatusSuccessFinishNoResult); 280926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 281926060e198137f8a64face70455324a8cd4362a5Caroline Tice else if (channel == "all") 282926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 283926060e198137f8a64face70455324a8cd4362a5Caroline Tice Log::DisableAllLogChannels(&result.GetErrorStream()); 284926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 285926060e198137f8a64face70455324a8cd4362a5Caroline Tice else 286926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 2875e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton LogChannelSP log_channel_sp (LogChannel::FindPlugin(channel.c_str())); 288926060e198137f8a64face70455324a8cd4362a5Caroline Tice if (log_channel_sp) 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2906c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham log_channel_sp->Disable(args.GetConstArgumentVector(), &result.GetErrorStream()); 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 294926060e198137f8a64face70455324a8cd4362a5Caroline Tice result.AppendErrorWithFormat("Invalid log channel '%s'.\n", args.GetArgumentAtIndex(0)); 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 301da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogList : public CommandObjectParsed 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 307238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogList(CommandInterpreter &interpreter) : 308da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 309da26bd203cbb104291b39891febf7481794f205fJim Ingham "log list", 310da26bd203cbb104291b39891febf7481794f205fJim Ingham "List the log categories for one or more log channels. If none specified, lists them all.", 311da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL) 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 31343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentEntry arg; 31443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 31543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 31643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 31743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 31843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_repetition = eArgRepeatStar; 31943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 32043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 32143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice arg.push_back (channel_arg); 32243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 32343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 32443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice m_arguments.push_back (arg); 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogList() 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 332da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 334da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 0) 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::ListAllLogChannels (&result.GetOutputStream()); 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (size_t i=0; i<argc; ++i) 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::Callbacks log_callbacks; 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string channel(args.GetArgumentAtIndex(i)); 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (Log::GetLogChannelCallbacks (channel.c_str(), log_callbacks)) 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_callbacks.list_categories (&result.GetOutputStream()); 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (channel == "all") 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::ListAllLogChannels (&result.GetOutputStream()); 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3625e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton LogChannelSP log_channel_sp (LogChannel::FindPlugin(channel.c_str())); 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log_channel_sp) 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_channel_sp->ListCategories(&result.GetOutputStream()); 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendErrorWithFormat("Invalid log channel '%s'.\n", args.GetArgumentAtIndex(0)); 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 377da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogTimer : public CommandObjectParsed 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 383238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogTimer(CommandInterpreter &interpreter) : 384da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 385da26bd203cbb104291b39891febf7481794f205fJim Ingham "log timers", 386da26bd203cbb104291b39891febf7481794f205fJim Ingham "Enable, disable, dump, and reset LLDB internal performance timers.", 387da26bd203cbb104291b39891febf7481794f205fJim Ingham "log timers < enable <depth> | disable | dump | increment <bool> | reset >") 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogTimer() 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 396da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 398da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusFailed); 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 1) 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *sub_command = args.GetArgumentAtIndex(0); 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (strcasecmp(sub_command, "enable") == 0) 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::SetDisplayDepth (UINT32_MAX); 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "disable") == 0) 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::DumpCategoryTimes (&result.GetOutputStream()); 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::SetDisplayDepth (0); 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "dump") == 0) 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::DumpCategoryTimes (&result.GetOutputStream()); 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "reset") == 0) 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::ResetCategoryTimes (); 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43119e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham else if (argc == 2) 43219e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 43319e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham const char *sub_command = args.GetArgumentAtIndex(0); 43419e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham 43519e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham if (strcasecmp(sub_command, "enable") == 0) 43619e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 43719e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham bool success; 43819e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham uint32_t depth = Args::StringToUInt32(args.GetArgumentAtIndex(1), 0, 0, &success); 43919e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham if (success) 44019e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 44119e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham Timer::SetDisplayDepth (depth); 44219e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham result.SetStatus(eReturnStatusSuccessFinishNoResult); 44319e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 44419e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham else 44519e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham result.AppendError("Could not convert enable depth to an unsigned integer."); 44619e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 4474ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham if (strcasecmp(sub_command, "increment") == 0) 4484ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham { 4494ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham bool success; 4504ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham bool increment = Args::StringToBoolean(args.GetArgumentAtIndex(1), false, &success); 4514ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham if (success) 4524ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham { 4534ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham Timer::SetQuiet (!increment); 4544ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham result.SetStatus(eReturnStatusSuccessFinishNoResult); 4554ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham } 4564ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham else 4574ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham result.AppendError("Could not convert increment value to boolean."); 4584ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham } 45919e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 46019e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!result.Succeeded()) 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError("Missing subcommand"); 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendErrorWithFormat("Usage: %s\n", m_cmd_syntax.c_str()); 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectLog constructor 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 47363094e0bb161580564954dee512955c1c79d3476Greg ClaytonCommandObjectLog::CommandObjectLog(CommandInterpreter &interpreter) : 474238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectMultiword (interpreter, 475238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton "log", 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "A set of commands for operating on logs.", 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "log <command> [<command-options>]") 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 479238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("enable", CommandObjectSP (new CommandObjectLogEnable (interpreter))); 480238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("disable", CommandObjectSP (new CommandObjectLogDisable (interpreter))); 481238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("list", CommandObjectSP (new CommandObjectLogList (interpreter))); 482238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("timers", CommandObjectSP (new CommandObjectLogTimer (interpreter))); 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectLog::~CommandObjectLog() 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 495