pgadmin3/include/debugger/dbgController.h
levinsv 4af765213c support PG11
Поддержка PostgreSQL 11 только для Windows
2018-10-10 22:59:25 +05:00

183 lines
5.3 KiB
C++

//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// dbgController.h - Debugger controller
//
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// class dbgController
//
// A dbgController object controls the behaviour of the debugger. It stays
// in the central of the whole debugger mechanism. It controls the flow of
// execution and also, asks the view to update the user presentation (when
// needed), also execute commands based on the user inputs.
//
////////////////////////////////////////////////////////////////////////////////
#ifndef DBGCONTROLLER_H
#define DBGCONTROLLER_H
#include <wx/wx.h>
#include <wx/event.h>
#include "db/pgQueryResultEvent.h"
#include "debugger/dbgTargetInfo.h"
#include "debugger/dbgModel.h"
class frmMain;
class frmDebugger;
typedef enum
{
DBG_SESSION_TYPE_UNKNOWN, // Session could be in-context or direct
DBG_SESSION_TYPE_INCONTEXT, // Session is configured for in-context debugging
DBG_SESSION_TYPE_DIRECT // Session is configured for direct debugging
} DebuggerSessionType;
typedef enum
{
DEBUGGER_UNKNOWN_API = 0,
DEBUGGER_V1_API = 1,
DEBUGGER_V2_API = 2,
DEBUGGER_V3_API = 3
} DebuggerApiVersion;
class dbgController : public wxEvtHandler
{
public:
dbgController(frmMain *_main, pgObject *_obj, bool _directDebugging = false);
~dbgController();
dbgTargetInfo *GetTargetInfo();
dbgModel *GetModel()
{
return m_model;
}
bool CanRestart()
{
return (m_dbgConn && (m_dbgConn->GetStatus() != PGCONN_OK));
}
// Debugging actions (called from the frmDebugger)
bool Start();
void ClearBreakpoint(int _lineNo);
void SetBreakpoint(int _lineNo);
void Countinue();
void StepOver();
void StepInto();
bool Stop();
void DepositValue(const wxString &_name, const wxString &_val);
bool SelectFrame(int _frameNo);
void UpdateBreakpoints();
bool HandleQuery(pgBatchQuery *_qry, const wxString &_err);
// Closing Debugger
bool CloseDebugger();
bool ExecuteTarget();
bool IsTerminated()
{
return m_terminated;
}
// Event functions
void OnNoticeReceived(wxCommandEvent &);
void OnStartDebugging(wxCommandEvent &);
void ResultTargetComplete(pgQueryResultEvent &);
void ResultPortAttach(pgQueryResultEvent &);
void ResultBreakpoint(pgQueryResultEvent &);
void ResultVarList(pgQueryResultEvent &);
void ResultStack(pgQueryResultEvent &);
void ResultBreakpoints(pgQueryResultEvent &);
void ResultNewBreakpoint(pgQueryResultEvent &);
void ResultNewBreakpointWait(pgQueryResultEvent &);
void ResultDeletedBreakpoint(pgQueryResultEvent &);
void ResultDepositValue(pgQueryResultEvent &);
void ResultListenerCreated(pgQueryResultEvent &);
void ResultTargetReady(pgQueryResultEvent &);
private:
static void NoticeHandler(void *arg, const char *message);
private:
const static wxString ms_cmdDebugSPLV1;
const static wxString ms_cmdDebugSPLV2;
const static wxString ms_cmdDebugPLPGSQLV1;
const static wxString ms_cmdDebugPLPGSQLV2;
const static wxString ms_cmdAttachToPort;
const static wxString ms_cmdWaitForBreakpointV1;
const static wxString ms_cmdWaitForBreakpointV2;
const static wxString ms_cmdGetVars;
const static wxString ms_cmdGetStack;
const static wxString ms_cmdGetBreakpoints;
const static wxString ms_cmdStepOverV1;
const static wxString ms_cmdStepOverV2;
const static wxString ms_cmdStepIntoV1;
const static wxString ms_cmdStepIntoV2;
const static wxString ms_cmdContinueV1;
const static wxString ms_cmdContinueV2;
const static wxString ms_cmdSetBreakpointV1;
const static wxString ms_cmdSetBreakpointV2;
const static wxString ms_cmdClearBreakpointV1;
const static wxString ms_cmdClearBreakpointV2;
const static wxString ms_cmdSelectFrameV1;
const static wxString ms_cmdSelectFrameV2;
const static wxString ms_cmdDepositValue;
const static wxString ms_cmdAbortTarget;
const static wxString ms_cmdAddBreakpointEDB;
const static wxString ms_cmdAddBreakpointPG;
const static wxString ms_cmdGetTargetInfo;
const static wxString ms_cmdCreateListener;
const static wxString ms_cmdWaitForTarget;
const static wxString ms_cmdIsBackendRunning;
private:
// Debugger Version for the current server
DebuggerApiVersion m_ver;
// Session type
DebuggerSessionType m_sessionType;
// Line actually shown from this offset
int m_lineOffset;
// Debugging Terminated
bool m_terminated;
bool m_isStopping;
// Main Window for the debugger
frmDebugger *m_frm;
// Connection for collecting the current debugging information
pgConn *m_dbgConn;
// Connetion Thread for fetching the debugging information in background
pgQueryThread *m_dbgThread;
// Connection to execute the function/procedure for the direct debugging
pgConn *m_execConn;
// Connection-thread to run the function in background for debugging
pgQueryThread *m_execConnThread;
// Mutex for debugger thread
wxMutex m_dbgThreadLock;
// Debugger Data Model
dbgModel *m_model;
// In-direct Debugging on which target-pid
wxString m_currTargetPid;
DECLARE_EVENT_TABLE()
};
#define MARKERINDEX_TO_MARKERMASK( MI ) ( 1 << MI )
#endif