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
|
/***************************************************************************
gdbcontroller.h - description
-------------------
begin : Sun Aug 8 1999
copyright : (C) 1999 by John Birch
email : jbb@kdevelop.org
***************************************************************************/
/***************************************************************************
* *
* 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 _GDBCONTROLLER_H_
#define _GDBCONTROLLER_H_
#include "dbgcontroller.h"
#include <qcstring.h>
#include <qdom.h>
#include <qobject.h>
#include <qptrlist.h>
#include <qstring.h>
class KProcess;
namespace GDBDebugger
{
class Breakpoint;
class DbgCommand;
class FramestackWidget;
class VarItem;
class VariableTree;
class STTY;
/**
* A front end implementation to the gdb command line debugger
* @author jbb
*/
class GDBController : public DbgController
{
Q_OBJECT
public:
GDBController(VariableTree *varTree, FramestackWidget *frameStack, QDomDocument &projectDom);
~GDBController();
protected:
void queueCmd(DbgCommand *cmd, bool executeNext=false);
private:
void parseProgramLocation (char *buf);
void parseBacktraceList (char *buf);
void parseThreadList (char* buf);
void parseBreakpointSet (char *buf);
void parseLocals (char type, char *buf);
void parseRequestedData (char *buf);
void parseWhatis (char *buf);
void parseLine (char *buf);
void parseFrameSelected (char *buf);
// void parseFileStart (char *buf);
char *parse (char *buf);
char *parseOther (char *buf);
char *parseCmdBlock (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 DomUtil::PairList& run_envvars, const QString& run_directory, const QString &application, const QString& run_arguments);
//void slotStart(const QString& shell, const QString &application);
void slotCoreFile(const QString &coreFile);
void slotAttachTo(int pid);
void slotStopDebugger();
void slotRun();
void slotRunUntil(const QString &filename, int lineNum);
void slotStepInto();
void slotStepOver();
void slotStepIntoIns();
void slotStepOverIns();
void slotStepOutOff();
void slotBreakInto();
void slotBPState( const Breakpoint& );
void slotClearAllBreakpoints();
void slotDisassemble(const QString &start, const QString &end);
void slotMemoryDump(const QString &start, const QString &amount);
void slotRegisters();
void slotLibraries();
void slotExpandItem(TrimmableItem *parent);
void slotExpandUserItem(VarItem *parent, const QCString &userRequest);
void slotSelectFrame(int frameNo, int threadNo, bool needFrames);
void slotSetLocalViewState(bool onOff);
// jw - type determination requires a var object, so we do it here
void slotVarItemConstructed(VarItem *item);
void slotUserGDBCmd(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);
signals:
void acceptPendingBPs ();
void unableToSetBPNow (int BPNo);
void debuggerRunError(int errorCode);
private:
FramestackWidget* frameStack_;
VariableTree* varTree_;
int currentFrame_;
int viewedThread_;
int gdbSizeofBuf_; // size of the output buffer
int gdbOutputLen_; // amount of data in the output buffer
char* gdbOutput_; // buffer for the output from kprocess
QCString holdingZone_;
QPtrList<DbgCommand> cmdList_;
DbgCommand* currentCmd_;
STTY* tty_;
QString badCore_;
QString application_;
// Some state variables
int state_;
bool programHasExited_;
bool backtraceDueToProgramStop_;
// Configuration values
QDomDocument &dom;
bool config_breakOnLoadingLibrary_;
bool config_forceBPSet_;
bool config_displayStaticMembers_;
bool config_asmDemangle_;
bool config_dbgTerminal_;
QString config_gdbPath_;
QString config_dbgShell_;
QCString config_configGdbScript_;
QCString config_runShellScript_;
QCString config_runGdbScript_;
int config_outputRadix_;
};
}
#endif
|