1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
/***************************************************************************
rdbcontroller.h - description
-------------------
begin : Sun Aug 8 1999
copyright : (C) 1999 by John Birch
email : jbb@kdevelop.org
Adapted for ruby debugging
--------------------------
begin : Mon Nov 1 2004
copyright : (C) 2004 by Richard Dale
email : Richard_Dale@tipitina.demon.co.uk
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef _RDBCONTROLLER_H_
#define _RDBCONTROLLER_H_
#include "dbgcontroller.h"
#include <qcstring.h>
#include <qdom.h>
#include <qobject.h>
#include <qptrlist.h>
#include <qstring.h>
#include <qsocketnotifier.h>
class KProcess;
namespace RDBDebugger
{
class Breakpoint;
class DbgCommand;
class FramestackWidget;
class VarItem;
class VariableTree;
class STTY;
/**
* A front end implementation to the ruby command line debugger
* @author jbb
*/
class RDBController : public DbgController
{
Q_OBJECT
public:
RDBController(VariableTree *varTree, FramestackWidget *frameStack, QDomDocument &projectDom);
~RDBController();
protected:
void queueCmd(DbgCommand *cmd, bool executeNext=false);
private:
void parseProgramLocation (char *buf);
void parseBacktraceList (char *buf);
void parseThreadList (char* buf);
void parseSwitchThread (char* buf);
void parseFrameMove (char *buf);
void parseBreakpointSet (char *buf);
void parseDisplay (char *buf, char * expr);
void parseUpdateDisplay (char *buf);
void parseGlobals (char *buf);
void parseLocals (char type, char *buf);
void parseRequestedData (char *buf);
void parseFrameSelected (char *buf);
void parse (char *buf);
void pauseApp();
void executeCmd ();
void destroyCmds();
void removeInfoRequests();
void actOnProgramPause(const QString &msg);
void programNoApp(const QString &msg, bool msgBox);
void setBreakpoint(const QCString &BPSetCmd, int key);
void clearBreakpoint(const QCString &BPClearCmd);
void modifyBreakpoint(const Breakpoint&);
void setStateOn(int stateOn) { state_ |= stateOn; }
void setStateOff(int stateOff) { state_ &= ~stateOff; }
bool stateIsOn(int state) { return state_ &state; }
public slots:
void configure();
void slotStart( const QString& shell, const QString& characterCoding,
const QString& run_directory, const QString& debuggee_path,
const QString &application, const QString& run_arguments,
bool show_constants, bool trace_into_ruby );
//void slotStart(const QString& shell, const QString &application);
void slotStopDebugger();
void slotRun();
void slotRunUntil(const QString &filename, int lineNum);
void slotStepInto();
void slotStepOver();
void slotStepOutOff();
void slotBreakInto();
void slotBPState( const Breakpoint& );
void slotClearAllBreakpoints();
void slotExpandItem(VarItem *parent, const QCString &userRequest);
void slotRubyInspect(const QString &inspectText);
void slotSelectFrame(int frameNo, int threadNo, const QString& frameName);
void slotFetchGlobals(bool fetch);
void slotAddWatchExpression(const QString& expr, bool execute);
void slotRemoveWatchExpression(int displayId);
void slotUserRDBCmd(const QString&);
protected slots:
void slotDbgStdout(KProcess *proc, char *buf, int buflen);
void slotDbgStderr(KProcess *proc, char *buf, int buflen);
void slotDbgWroteStdin(KProcess *proc);
void slotDbgProcessExited(KProcess *proc);
void slotAcceptConnection(int masterSocket);
void slotReadFromSocket(int socket);
signals:
void acceptPendingBPs ();
void unableToSetBPNow (int BPNo);
void addWatchExpression (const QString&);
private:
FramestackWidget* frameStack_;
VariableTree* varTree_;
int currentFrame_;
int viewedThread_;
int stdoutSizeofBuf_; // size of the buffer for holding stdout piped
// from the ruby program
int stdoutOutputLen_; // amount of data in the output buffer
char* stdoutOutput_; // buffer for the output from kprocess
QCString holdingZone_;
int rdbSizeofBuf_; // size of the output buffer from rdb
int rdbOutputLen_; // amount of data in the rdb buffer
char* rdbOutput_; // buffer for the output from rdb via the Unix socket
int masterSocket_; // The socket to accept connections
QSocketNotifier* acceptNotifier_;
static QCString unixSocketPath_; // The name of the Unix Domain socket
int socket_; // The socket to read and write to the debuggee
QSocketNotifier* socketNotifier_;
QPtrList<DbgCommand> cmdList_;
DbgCommand* currentCmd_;
QString currentPrompt_;
STTY* tty_;
// Details for starting the ruby debugger process
QString rubyInterpreter_;
QString characterCoding_;
QString runDirectory_;
QString debuggeePath_;
QString application_;
QString runArguments_;
bool showConstants_;
bool traceIntoRuby_;
// Some state variables
int state_;
bool programHasExited_;
// Configuration values
QDomDocument &dom;
bool config_forceBPSet_;
bool config_dbgTerminal_;
};
}
#endif
|