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 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CommandObjectLog.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private-log.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2084cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Debugger.h" 225f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Log.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h" 2584cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Options.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/RegularExpression.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Timer.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3163094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h" 32705d6782f95a38caa5cddf8dcc32d6b13fab20fcSean Callanan#include "lldb/Interpreter/CommandInterpreter.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/LineTable.h" 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h" 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h" 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolVendor.h" 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogEnable : public CommandObjectParsed 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 53238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogEnable(CommandInterpreter &interpreter) : 54da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 55da26bd203cbb104291b39891febf7481794f205fJim Ingham "log enable", 56da26bd203cbb104291b39891febf7481794f205fJim Ingham "Enable logging for a single log channel.", 57da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL), 58f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 607826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 617826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentEntry arg1; 627826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentEntry arg2; 6343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 647826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice CommandArgumentData category_arg; 6543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 6643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 6743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 6843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_repetition = eArgRepeatPlain; 6943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 7043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice arg1.push_back (channel_arg); 7243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice category_arg.arg_type = eArgTypeLogCategory; 747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice category_arg.arg_repetition = eArgRepeatPlus; 757826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 767826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice arg2.push_back (category_arg); 777826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 7843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 797826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice m_arguments.push_back (arg1); 807826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice m_arguments.push_back (arg2); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogEnable() 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Options * 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetOptions () 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return &m_options; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 945e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int 955e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// HandleArgumentCompletion (Args &input, 965e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int &cursor_index, 975e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int &cursor_char_position, 985e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// OptionElementVector &opt_element_vector, 995e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int match_start_point, 1005e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// int max_return_elements, 1015e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// bool &word_complete, 1025e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// StringList &matches) 1035e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// { 1045e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// std::string completion_str (input.GetArgumentAtIndex(cursor_index)); 1055e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// completion_str.erase (cursor_char_position); 1065e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// 1075e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// if (cursor_index == 1) 1085e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// { 1095e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// // 1105e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// Log::AutoCompleteChannelName (completion_str.c_str(), matches); 1115e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// } 1125e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// return matches.GetSize(); 1135e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// } 1145e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton// 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class CommandOptions : public Options 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 120f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandOptions (CommandInterpreter &interpreter) : 121f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options (interpreter), 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_file (), 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_options (0) 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandOptions () 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual Error 134143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 1376475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton const int short_option = m_getopt_table[option_idx].val; 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner switch (short_option) 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 141f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton case 'f': log_file.SetFile(option_arg, true); break; 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 't': log_options |= LLDB_LOG_OPTION_THREADSAFE; break; 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'v': log_options |= LLDB_LOG_OPTION_VERBOSE; break; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'g': log_options |= LLDB_LOG_OPTION_DEBUG; break; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 's': log_options |= LLDB_LOG_OPTION_PREPEND_SEQUENCE; break; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'T': log_options |= LLDB_LOG_OPTION_PREPEND_TIMESTAMP; break; 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'p': log_options |= LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD;break; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner case 'n': log_options |= LLDB_LOG_OPTION_PREPEND_THREAD_NAME; break; 149f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton case 'S': log_options |= LLDB_LOG_OPTION_BACKTRACE; break; 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default: 1519c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return error; 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 159143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 161f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton log_file.Clear(); 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_options = 0; 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 165b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const OptionDefinition* 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDefinitions () 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return g_option_table; 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Options table: Required for subclasses of Options. 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 173b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton static OptionDefinition g_option_table[]; 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Instance variables to hold the values for command options. 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton FileSpec log_file; 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t log_options; 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 182da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual bool 183da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 184da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandReturnObject &result) 185da26bd203cbb104291b39891febf7481794f205fJim Ingham { 186da26bd203cbb104291b39891febf7481794f205fJim Ingham if (args.GetArgumentCount() < 2) 187da26bd203cbb104291b39891febf7481794f205fJim Ingham { 188da26bd203cbb104291b39891febf7481794f205fJim Ingham result.AppendErrorWithFormat("%s takes a log channel and one or more log types.\n", m_cmd_name.c_str()); 189da26bd203cbb104291b39891febf7481794f205fJim Ingham } 190da26bd203cbb104291b39891febf7481794f205fJim Ingham else 191da26bd203cbb104291b39891febf7481794f205fJim Ingham { 192da26bd203cbb104291b39891febf7481794f205fJim Ingham std::string channel(args.GetArgumentAtIndex(0)); 193da26bd203cbb104291b39891febf7481794f205fJim Ingham args.Shift (); // Shift off the channel 194f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton char log_file[PATH_MAX]; 195f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton if (m_options.log_file) 196f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton m_options.log_file.GetPath(log_file, sizeof(log_file)); 197f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton else 198f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton log_file[0] = '\0'; 199da26bd203cbb104291b39891febf7481794f205fJim Ingham bool success = m_interpreter.GetDebugger().EnableLog (channel.c_str(), 200da26bd203cbb104291b39891febf7481794f205fJim Ingham args.GetConstArgumentVector(), 201f61e16bdedfb721e9c7dd94ae6b9eb1ce1d9bd5eGreg Clayton log_file, 202da26bd203cbb104291b39891febf7481794f205fJim Ingham m_options.log_options, 203da26bd203cbb104291b39891febf7481794f205fJim Ingham result.GetErrorStream()); 204da26bd203cbb104291b39891febf7481794f205fJim Ingham if (success) 205da26bd203cbb104291b39891febf7481794f205fJim Ingham result.SetStatus (eReturnStatusSuccessFinishNoResult); 206da26bd203cbb104291b39891febf7481794f205fJim Ingham else 207da26bd203cbb104291b39891febf7481794f205fJim Ingham result.SetStatus (eReturnStatusFailed); 208da26bd203cbb104291b39891febf7481794f205fJim Ingham } 209da26bd203cbb104291b39891febf7481794f205fJim Ingham return result.Succeeded(); 210da26bd203cbb104291b39891febf7481794f205fJim Ingham } 211da26bd203cbb104291b39891febf7481794f205fJim Ingham 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandOptions m_options; 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonOptionDefinition 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectLogEnable::CommandOptions::g_option_table[] = 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2184d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "file", 'f', required_argument, NULL, 0, eArgTypeFilename, "Set the destination file to log to."}, 2194d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "threadsafe", 't', no_argument, NULL, 0, eArgTypeNone, "Enable thread safe logging to avoid interweaved log lines." }, 2204d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "verbose", 'v', no_argument, NULL, 0, eArgTypeNone, "Enable verbose logging." }, 2214d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "debug", 'g', no_argument, NULL, 0, eArgTypeNone, "Enable debug logging." }, 2224d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "sequence", 's', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with an increasing integer sequence id." }, 2234d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "timestamp", 'T', no_argument, NULL, 0, eArgTypeNone, "Prepend all log lines with a timestamp." }, 2244d6675c8e1cab6360f59865229835ae137d6f68aCaroline 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." }, 2254d6675c8e1cab6360f59865229835ae137d6f68aCaroline 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." }, 226f737d372a9672c9feaedf4b2cd7b16e31357d38eGreg Clayton{ LLDB_OPT_SET_1, false, "stack", 'S', no_argument, NULL, 0, eArgTypeNone, "Append a stack backtrace to each log line." }, 2274d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 230da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogDisable : public CommandObjectParsed 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 236238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogDisable(CommandInterpreter &interpreter) : 237da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 238da26bd203cbb104291b39891febf7481794f205fJim Ingham "log disable", 239da26bd203cbb104291b39891febf7481794f205fJim Ingham "Disable one or more log channel categories.", 240da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL) 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2426a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentEntry arg1; 2436a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentEntry arg2; 24443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 2456a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice CommandArgumentData category_arg; 24643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 24743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 24843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 2496a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice channel_arg.arg_repetition = eArgRepeatPlain; 25043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 25143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 2526a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice arg1.push_back (channel_arg); 25343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 2546a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice category_arg.arg_type = eArgTypeLogCategory; 2556a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice category_arg.arg_repetition = eArgRepeatPlus; 2566a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice 2576a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice arg2.push_back (category_arg); 2586a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice 25943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 2606a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice m_arguments.push_back (arg1); 2616a9e5c27e33fc43ff282a94769463e4e1a40754fCaroline Tice m_arguments.push_back (arg2); 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogDisable() 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 269da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 271da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 0) 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2779721fe9795f5d34d10e6815902acc38dddd2722bJim Ingham result.AppendErrorWithFormat("%s takes a log channel and one or more log types.\n", m_cmd_name.c_str()); 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 281926060e198137f8a64face70455324a8cd4362a5Caroline Tice Log::Callbacks log_callbacks; 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 283926060e198137f8a64face70455324a8cd4362a5Caroline Tice std::string channel(args.GetArgumentAtIndex(0)); 284926060e198137f8a64face70455324a8cd4362a5Caroline Tice args.Shift (); // Shift off the channel 2850e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton if (Log::GetLogChannelCallbacks (ConstString(channel.c_str()), log_callbacks)) 286926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 2876c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham log_callbacks.disable (args.GetConstArgumentVector(), &result.GetErrorStream()); 288926060e198137f8a64face70455324a8cd4362a5Caroline Tice result.SetStatus(eReturnStatusSuccessFinishNoResult); 289926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 290926060e198137f8a64face70455324a8cd4362a5Caroline Tice else if (channel == "all") 291926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 292926060e198137f8a64face70455324a8cd4362a5Caroline Tice Log::DisableAllLogChannels(&result.GetErrorStream()); 293926060e198137f8a64face70455324a8cd4362a5Caroline Tice } 294926060e198137f8a64face70455324a8cd4362a5Caroline Tice else 295926060e198137f8a64face70455324a8cd4362a5Caroline Tice { 2965e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton LogChannelSP log_channel_sp (LogChannel::FindPlugin(channel.c_str())); 297926060e198137f8a64face70455324a8cd4362a5Caroline Tice if (log_channel_sp) 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2996c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham log_channel_sp->Disable(args.GetConstArgumentVector(), &result.GetErrorStream()); 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 303926060e198137f8a64face70455324a8cd4362a5Caroline Tice result.AppendErrorWithFormat("Invalid log channel '%s'.\n", args.GetArgumentAtIndex(0)); 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 310da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogList : public CommandObjectParsed 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 316238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogList(CommandInterpreter &interpreter) : 317da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 318da26bd203cbb104291b39891febf7481794f205fJim Ingham "log list", 319da26bd203cbb104291b39891febf7481794f205fJim Ingham "List the log categories for one or more log channels. If none specified, lists them all.", 320da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL) 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 32243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentEntry arg; 32343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData channel_arg; 32443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 32543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 32643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_type = eArgTypeLogChannel; 32743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice channel_arg.arg_repetition = eArgRepeatStar; 32843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 32943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 33043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice arg.push_back (channel_arg); 33143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 33243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 33343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice m_arguments.push_back (arg); 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogList() 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 341da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 343da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 0) 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::ListAllLogChannels (&result.GetOutputStream()); 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (size_t i=0; i<argc; ++i) 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::Callbacks log_callbacks; 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string channel(args.GetArgumentAtIndex(i)); 3590e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton if (Log::GetLogChannelCallbacks (ConstString(channel.c_str()), log_callbacks)) 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_callbacks.list_categories (&result.GetOutputStream()); 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (channel == "all") 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Log::ListAllLogChannels (&result.GetOutputStream()); 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3715e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton LogChannelSP log_channel_sp (LogChannel::FindPlugin(channel.c_str())); 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log_channel_sp) 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log_channel_sp->ListCategories(&result.GetOutputStream()); 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendErrorWithFormat("Invalid log channel '%s'.\n", args.GetArgumentAtIndex(0)); 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 386da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectLogTimer : public CommandObjectParsed 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 392238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectLogTimer(CommandInterpreter &interpreter) : 393da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 394da26bd203cbb104291b39891febf7481794f205fJim Ingham "log timers", 395da26bd203cbb104291b39891febf7481794f205fJim Ingham "Enable, disable, dump, and reset LLDB internal performance timers.", 396da26bd203cbb104291b39891febf7481794f205fJim Ingham "log timers < enable <depth> | disable | dump | increment <bool> | reset >") 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectLogTimer() 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 405da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 407da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const size_t argc = args.GetArgumentCount(); 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusFailed); 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc == 1) 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *sub_command = args.GetArgumentAtIndex(0); 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (strcasecmp(sub_command, "enable") == 0) 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::SetDisplayDepth (UINT32_MAX); 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishNoResult); 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "disable") == 0) 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::DumpCategoryTimes (&result.GetOutputStream()); 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::SetDisplayDepth (0); 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "dump") == 0) 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::DumpCategoryTimes (&result.GetOutputStream()); 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else if (strcasecmp(sub_command, "reset") == 0) 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Timer::ResetCategoryTimes (); 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus(eReturnStatusSuccessFinishResult); 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 44019e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham else if (argc == 2) 44119e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 44219e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham const char *sub_command = args.GetArgumentAtIndex(0); 44319e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham 44419e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham if (strcasecmp(sub_command, "enable") == 0) 44519e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 44619e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham bool success; 44719e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham uint32_t depth = Args::StringToUInt32(args.GetArgumentAtIndex(1), 0, 0, &success); 44819e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham if (success) 44919e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham { 45019e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham Timer::SetDisplayDepth (depth); 45119e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham result.SetStatus(eReturnStatusSuccessFinishNoResult); 45219e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 45319e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham else 45419e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham result.AppendError("Could not convert enable depth to an unsigned integer."); 45519e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 4564ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham if (strcasecmp(sub_command, "increment") == 0) 4574ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham { 4584ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham bool success; 4594ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham bool increment = Args::StringToBoolean(args.GetArgumentAtIndex(1), false, &success); 4604ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham if (success) 4614ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham { 4624ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham Timer::SetQuiet (!increment); 4634ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham result.SetStatus(eReturnStatusSuccessFinishNoResult); 4644ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham } 4654ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham else 4664ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham result.AppendError("Could not convert increment value to boolean."); 4674ba3999e714c73ef52a21b0d59f705c0cad98810Jim Ingham } 46819e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham } 46919e29a8acb45cac8de786fda01cfe091ca0122d0Jim Ingham 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!result.Succeeded()) 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError("Missing subcommand"); 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendErrorWithFormat("Usage: %s\n", m_cmd_syntax.c_str()); 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectLog constructor 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 48263094e0bb161580564954dee512955c1c79d3476Greg ClaytonCommandObjectLog::CommandObjectLog(CommandInterpreter &interpreter) : 483238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectMultiword (interpreter, 484238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton "log", 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "A set of commands for operating on logs.", 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "log <command> [<command-options>]") 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 488238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("enable", CommandObjectSP (new CommandObjectLogEnable (interpreter))); 489238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("disable", CommandObjectSP (new CommandObjectLogDisable (interpreter))); 490238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("list", CommandObjectSP (new CommandObjectLogList (interpreter))); 491238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("timers", CommandObjectSP (new CommandObjectLogTimer (interpreter))); 49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectLog::~CommandObjectLog() 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 50324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 504