diff options
Diffstat (limited to 'lldb/tools/lldb-server/LLDBServerUtilities.cpp')
-rw-r--r-- | lldb/tools/lldb-server/LLDBServerUtilities.cpp | 74 |
1 files changed, 32 insertions, 42 deletions
diff --git a/lldb/tools/lldb-server/LLDBServerUtilities.cpp b/lldb/tools/lldb-server/LLDBServerUtilities.cpp index 438d9f127d6..86d8469933e 100644 --- a/lldb/tools/lldb-server/LLDBServerUtilities.cpp +++ b/lldb/tools/lldb-server/LLDBServerUtilities.cpp @@ -21,47 +21,37 @@ using namespace lldb; using namespace lldb_private::lldb_server; using namespace llvm; -bool -LLDBServerUtilities::SetupLogging(const std::string& log_file, - const StringRef& log_channels, - uint32_t log_options) -{ - lldb::StreamSP log_stream_sp; - if (log_file.empty()) - { - log_stream_sp.reset(new StreamFile(stdout, false)); +bool LLDBServerUtilities::SetupLogging(const std::string &log_file, + const StringRef &log_channels, + uint32_t log_options) { + lldb::StreamSP log_stream_sp; + if (log_file.empty()) { + log_stream_sp.reset(new StreamFile(stdout, false)); + } else { + uint32_t options = File::eOpenOptionWrite | File::eOpenOptionCanCreate | + File::eOpenOptionCloseOnExec | File::eOpenOptionAppend; + if (!(log_options & LLDB_LOG_OPTION_APPEND)) + options |= File::eOpenOptionTruncate; + + log_stream_sp.reset(new StreamFile(log_file.c_str(), options)); + } + + SmallVector<StringRef, 32> channel_array; + log_channels.split(channel_array, ":", /*MaxSplit*/ -1, /*KeepEmpty*/ false); + for (auto channel_with_categories : channel_array) { + StreamString error_stream; + Args channel_then_categories(channel_with_categories); + std::string channel(channel_then_categories.GetArgumentAtIndex(0)); + channel_then_categories.Shift(); // Shift off the channel + + bool success = Log::EnableLogChannel( + log_stream_sp, log_options, channel.c_str(), + channel_then_categories.GetConstArgumentVector(), error_stream); + if (!success) { + fprintf(stderr, "Unable to open log file '%s' for channel \"%s\"\n", + log_file.c_str(), channel_with_categories.str().c_str()); + return false; } - else - { - uint32_t options = File::eOpenOptionWrite | File::eOpenOptionCanCreate | - File::eOpenOptionCloseOnExec | File::eOpenOptionAppend; - if (!(log_options & LLDB_LOG_OPTION_APPEND)) - options |= File::eOpenOptionTruncate; - - log_stream_sp.reset(new StreamFile(log_file.c_str(), options)); - } - - SmallVector<StringRef, 32> channel_array; - log_channels.split(channel_array, ":", /*MaxSplit*/ -1, /*KeepEmpty*/ false); - for (auto channel_with_categories : channel_array) - { - StreamString error_stream; - Args channel_then_categories(channel_with_categories); - std::string channel(channel_then_categories.GetArgumentAtIndex(0)); - channel_then_categories.Shift (); // Shift off the channel - - bool success = Log::EnableLogChannel(log_stream_sp, - log_options, - channel.c_str(), - channel_then_categories.GetConstArgumentVector(), - error_stream); - if (!success) - { - fprintf(stderr, "Unable to open log file '%s' for channel \"%s\"\n", - log_file.c_str(), - channel_with_categories.str().c_str()); - return false; - } - } - return true; + } + return true; } |