LLDB mainline
CommandObjectDiagnostics.cpp
Go to the documentation of this file.
1//===-- CommandObjectDiagnostics.cpp --------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
18
19using namespace lldb;
20using namespace lldb_private;
21
22#define LLDB_OPTIONS_diagnostics_dump
23#include "CommandOptions.inc"
24
26public:
27 // Constructors and Destructors
29 : CommandObjectParsed(interpreter, "diagnostics dump",
30 "Dump diagnostics to disk", nullptr) {}
31
32 ~CommandObjectDiagnosticsDump() override = default;
33
34 class CommandOptions : public Options {
35 public:
36 CommandOptions() = default;
37
38 ~CommandOptions() override = default;
39
40 Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
41 ExecutionContext *execution_context) override {
43 const int short_option = m_getopt_table[option_idx].val;
44
45 switch (short_option) {
46 case 'd':
47 directory.SetDirectory(option_arg);
48 break;
49 default:
50 llvm_unreachable("Unimplemented option");
51 }
52 return error;
53 }
54
55 void OptionParsingStarting(ExecutionContext *execution_context) override {
57 }
58
59 llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
60 return llvm::ArrayRef(g_diagnostics_dump_options);
61 }
62
64 };
65
66 Options *GetOptions() override { return &m_options; }
67
68protected:
69 llvm::Expected<FileSpec> GetDirectory() {
70 if (m_options.directory) {
71 auto ec =
72 llvm::sys::fs::create_directories(m_options.directory.GetPath());
73 if (ec)
74 return llvm::errorCodeToError(ec);
75 return m_options.directory;
76 }
78 }
79
80 void DoExecute(Args &args, CommandReturnObject &result) override {
81 llvm::Expected<FileSpec> directory = GetDirectory();
82
83 if (!directory) {
84 result.AppendError(llvm::toString(directory.takeError()));
85 return;
86 }
87
88 llvm::Error error = Diagnostics::Instance().Create(*directory);
89 if (error) {
90 result.AppendErrorWithFormat("failed to write diagnostics to %s",
91 directory->GetPath().c_str());
92 result.AppendError(llvm::toString(std::move(error)));
93 return;
94 }
95
96 result.GetOutputStream() << "diagnostics written to " << *directory << '\n';
97
99 return;
100 }
101
103};
104
106 CommandInterpreter &interpreter)
107 : CommandObjectMultiword(interpreter, "diagnostics",
108 "Commands controlling LLDB diagnostics.",
109 "diagnostics <subcommand> [<command-options>]") {
111 "dump", CommandObjectSP(new CommandObjectDiagnosticsDump(interpreter)));
112}
113
static llvm::raw_ostream & error(Stream &strm)
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
void OptionParsingStarting(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
llvm::Expected< FileSpec > GetDirectory()
void DoExecute(Args &args, CommandReturnObject &result) override
~CommandObjectDiagnosticsDump() override=default
CommandObjectDiagnosticsDump(CommandInterpreter &interpreter)
A command line argument class.
Definition: Args.h:33
CommandObjectDiagnostics(CommandInterpreter &interpreter)
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
void void AppendError(llvm::StringRef in_string)
void SetStatus(lldb::ReturnStatus status)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
llvm::Error Create(const FileSpec &dir)
Gather diagnostics in the given directory.
Definition: Diagnostics.cpp:91
static llvm::Expected< FileSpec > CreateUniqueDirectory()
Create a unique diagnostic directory.
Definition: Diagnostics.cpp:82
static Diagnostics & Instance()
Definition: Diagnostics.cpp:40
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A file utility class.
Definition: FileSpec.h:56
void SetDirectory(ConstString directory)
Directory string set accessor.
Definition: FileSpec.cpp:335
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
Definition: FileSpec.cpp:367
void Clear()
Clears the object state.
Definition: FileSpec.cpp:259
A command line option parsing protocol class.
Definition: Options.h:58
std::vector< Option > m_getopt_table
Definition: Options.h:198
An error handling class.
Definition: Status.h:44
A class that represents a running process on the host machine.
Definition: SBAddress.h:15
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
Definition: lldb-forward.h:331
@ eReturnStatusSuccessFinishResult