1 //===-- CommandObjectBreakpointCommand.h ------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef liblldb_CommandObjectBreakpointCommand_h_
11 #define liblldb_CommandObjectBreakpointCommand_h_
12 
13 // C Includes
14 // C++ Includes
15 
16 
17 // Other libraries and framework includes
18 // Project includes
19 
20 #include "lldb/lldb-types.h"
21 #include "lldb/Interpreter/Options.h"
22 #include "lldb/Core/InputReader.h"
23 #include "lldb/Interpreter/CommandObject.h"
24 #include "lldb/Interpreter/CommandReturnObject.h"
25 #include "lldb/Interpreter/CommandObjectMultiword.h"
26 
27 
28 namespace lldb_private {
29 
30 //-------------------------------------------------------------------------
31 // CommandObjectMultiwordBreakpoint
32 //-------------------------------------------------------------------------
33 
34 class CommandObjectBreakpointCommand : public CommandObjectMultiword
35 {
36 public:
37     CommandObjectBreakpointCommand (CommandInterpreter &interpreter);
38 
39     virtual
40     ~CommandObjectBreakpointCommand ();
41 
42 
43     static bool
44     BreakpointOptionsCallbackFunction (void *baton,
45                                        StoppointCallbackContext *context,
46                                        lldb::user_id_t break_id,
47                                        lldb::user_id_t break_loc_id);
48 };
49 
50 //-------------------------------------------------------------------------
51 // CommandObjectBreakpointCommandAdd
52 //-------------------------------------------------------------------------
53 
54 
55 class CommandObjectBreakpointCommandAdd : public CommandObject
56 {
57 public:
58 
59     CommandObjectBreakpointCommandAdd ();
60 
61     virtual
62     ~CommandObjectBreakpointCommandAdd ();
63 
64     virtual bool
65     Execute (CommandInterpreter &interpreter,
66              Args& command,
67              CommandReturnObject &result);
68 
69     virtual Options *
70     GetOptions ();
71 
72     void
73     CollectDataForBreakpointCommandCallback (CommandInterpreter &interpreter,
74                                              BreakpointOptions *bp_options,
75                                              CommandReturnObject &result);
76 
77     /// Set a one-liner as the callback for the breakpoint.
78     void
79     SetBreakpointCommandCallback (CommandInterpreter &interpreter,
80                                   BreakpointOptions *bp_options,
81                                   const char *oneliner);
82 
83     static size_t
84     GenerateBreakpointCommandCallback (void *baton,
85                                        InputReader &reader,
86                                        lldb::InputReaderAction notification,
87                                        const char *bytes,
88                                        size_t bytes_len);
89 
90     static bool
91     BreakpointOptionsCallbackFunction (void *baton,
92                                        StoppointCallbackContext *context,
93                                        lldb::user_id_t break_id,
94                                        lldb::user_id_t break_loc_id);
95 
96 
97     class CommandOptions : public Options
98     {
99     public:
100 
101         CommandOptions ();
102 
103         virtual
104         ~CommandOptions ();
105 
106         virtual Error
107         SetOptionValue (int option_idx, const char *option_arg);
108 
109         void
110         ResetOptionValues ();
111 
112         const lldb::OptionDefinition*
113         GetDefinitions ();
114 
115         // Options table: Required for subclasses of Options.
116 
117         static lldb::OptionDefinition g_option_table[];
118 
119         // Instance variables to hold the values for command options.
120 
121         bool m_use_commands;
122         bool m_use_script_language;
123         lldb::ScriptLanguage m_script_language;
124 
125         // Instance variables to hold the values for one_liner options.
126         bool m_use_one_liner;
127         std::string m_one_liner;
128     };
129 
130 private:
131     CommandOptions m_options;
132 };
133 
134 //-------------------------------------------------------------------------
135 // CommandObjectBreakpointCommandRemove
136 //-------------------------------------------------------------------------
137 
138 class CommandObjectBreakpointCommandRemove : public CommandObject
139 {
140 public:
141     CommandObjectBreakpointCommandRemove ();
142 
143     virtual
144     ~CommandObjectBreakpointCommandRemove ();
145 
146     virtual bool
147     Execute (CommandInterpreter &interpreter,
148              Args& command,
149              CommandReturnObject &result);
150 
151 private:
152 };
153 
154 //-------------------------------------------------------------------------
155 // CommandObjectBreakpointCommandList
156 //-------------------------------------------------------------------------
157 
158 class CommandObjectBreakpointCommandList : public CommandObject
159 {
160 public:
161     CommandObjectBreakpointCommandList ();
162 
163     virtual
164     ~CommandObjectBreakpointCommandList ();
165 
166     virtual bool
167     Execute (CommandInterpreter &interpreter,
168              Args& command,
169              CommandReturnObject &result);
170 
171 private:
172 };
173 
174 
175 } // namespace lldb_private
176 
177 #endif  // liblldb_CommandObjectBreakpointCommand_h_
178