blob: 394592f3170f82caa0e291aa28a42abaf9efda59 [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001//===- Debugger.h - LLVM debugger library interface -------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner84e66db2007-12-29 19:59:42 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Dan Gohmanf17a25c2007-07-18 16:29:46 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the LLVM source-level debugger library interface.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_DEBUGGER_DEBUGGER_H
15#define LLVM_DEBUGGER_DEBUGGER_H
16
17#include <string>
18#include <vector>
19
20namespace llvm {
21 class Module;
22 class InferiorProcess;
23
24 /// Debugger class - This class implements the LLVM source-level debugger.
25 /// This allows clients to handle the user IO processing without having to
26 /// worry about how the debugger itself works.
27 ///
28 class Debugger {
29 // State the debugger needs when starting and stopping the program.
30 std::vector<std::string> ProgramArguments;
31
32 // The environment to run the program with. This should eventually be
33 // changed to vector of strings when we allow the user to edit the
34 // environment.
35 const char * const *Environment;
36
37 // Program - The currently loaded program, or null if none is loaded.
38 Module *Program;
39
40 // Process - The currently executing inferior process.
41 InferiorProcess *Process;
42
43 Debugger(const Debugger &); // DO NOT IMPLEMENT
44 void operator=(const Debugger &); // DO NOT IMPLEMENT
45 public:
46 Debugger();
47 ~Debugger();
48
49 //===------------------------------------------------------------------===//
50 // Methods for manipulating and inspecting the execution environment.
51 //
52
53 /// initializeEnvironment - Specify the environment the program should run
54 /// with. This is used to initialize the environment of the program to the
55 /// environment of the debugger.
56 void initializeEnvironment(const char *const *envp) {
57 Environment = envp;
58 }
59
60 /// setWorkingDirectory - Specify the working directory for the program to
61 /// be started from.
62 void setWorkingDirectory(const std::string &Dir) {
63 // FIXME: implement
64 }
65
66 template<typename It>
67 void setProgramArguments(It I, It E) {
68 ProgramArguments.assign(I, E);
69 }
70 unsigned getNumProgramArguments() const { return ProgramArguments.size(); }
71 const std::string &getProgramArgument(unsigned i) const {
72 return ProgramArguments[i];
73 }
74
75
76 //===------------------------------------------------------------------===//
77 // Methods for manipulating and inspecting the program currently loaded.
78 //
79
80 /// isProgramLoaded - Return true if there is a program currently loaded.
81 ///
82 bool isProgramLoaded() const { return Program != 0; }
83
84 /// getProgram - Return the LLVM module corresponding to the program.
85 ///
86 Module *getProgram() const { return Program; }
87
88 /// getProgramPath - Get the path of the currently loaded program, or an
89 /// empty string if none is loaded.
90 std::string getProgramPath() const;
91
92 /// loadProgram - If a program is currently loaded, unload it. Then search
93 /// the PATH for the specified program, loading it when found. If the
94 /// specified program cannot be found, an exception is thrown to indicate
95 /// the error.
96 void loadProgram(const std::string &Path);
97
98 /// unloadProgram - If a program is running, kill it, then unload all traces
99 /// of the current program. If no program is loaded, this method silently
100 /// succeeds.
101 void unloadProgram();
102
103 //===------------------------------------------------------------------===//
104 // Methods for manipulating and inspecting the program currently running.
105 //
106 // If the program is running, and the debugger is active, then we know that
107 // the program has stopped. This being the case, we can inspect the
108 // program, ask it for its source location, set breakpoints, etc.
109 //
110
111 /// isProgramRunning - Return true if a program is loaded and has a
112 /// currently active instance.
113 bool isProgramRunning() const { return Process != 0; }
114
115 /// getRunningProcess - If there is no program running, throw an exception.
116 /// Otherwise return the running process so that it can be inspected by the
117 /// debugger.
118 const InferiorProcess &getRunningProcess() const {
119 if (Process == 0) throw "No process running.";
120 return *Process;
121 }
122
123 /// createProgram - Create an instance of the currently loaded program,
124 /// killing off any existing one. This creates the program and stops it at
125 /// the first possible moment. If there is no program loaded or if there is
126 /// a problem starting the program, this method throws an exception.
127 void createProgram();
128
129 /// killProgram - If the program is currently executing, kill off the
130 /// process and free up any state related to the currently running program.
131 /// If there is no program currently running, this just silently succeeds.
132 /// If something horrible happens when killing the program, an exception
133 /// gets thrown.
134 void killProgram();
135
136
137 //===------------------------------------------------------------------===//
138 // Methods for continuing execution. These methods continue the execution
139 // of the program by some amount. If the program is successfully stopped,
140 // execution returns, otherwise an exception is thrown.
141 //
142 // NOTE: These methods should always be used in preference to directly
143 // accessing the Dbg object, because these will delete the Process object if
144 // the process unexpectedly dies.
145 //
146
147 /// stepProgram - Implement the 'step' command, continuing execution until
148 /// the next possible stop point.
149 void stepProgram();
150
151 /// nextProgram - Implement the 'next' command, continuing execution until
152 /// the next possible stop point that is in the current function.
153 void nextProgram();
154
155 /// finishProgram - Implement the 'finish' command, continuing execution
156 /// until the specified frame ID returns.
157 void finishProgram(void *Frame);
158
159 /// contProgram - Implement the 'cont' command, continuing execution until
160 /// the next breakpoint is encountered.
161 void contProgram();
162 };
163
164 class NonErrorException {
165 std::string Message;
166 public:
167 NonErrorException(const std::string &M) : Message(M) {}
168 const std::string &getMessage() const { return Message; }
169 };
170
171} // end namespace llvm
172
173#endif