File: debuggermanager.h

package info (click to toggle)
codelite 6.1.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 48,992 kB
  • ctags: 43,502
  • sloc: cpp: 334,263; ansic: 18,441; xml: 4,713; yacc: 2,653; lex: 2,449; python: 1,188; sh: 385; makefile: 40
file content (137 lines) | stat: -rw-r--r-- 5,250 bytes parent folder | download
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
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright            : (C) 2008 by Eran Ifrah
// file name            : debuggermanager.h
//
// -------------------------------------------------------------------------
// A
//              _____           _      _     _ _
//             /  __ \         | |    | |   (_) |
//             | /  \/ ___   __| | ___| |    _| |_ ___
//             | |    / _ \ / _  |/ _ \ |   | | __/ _ )
//             | \__/\ (_) | (_| |  __/ |___| | ||  __/
//              \____/\___/ \__,_|\___\_____/_|\__\___|
//
//                                                  F i l e
//
//    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 DEBUGGER_MANAGER_H
#define DEBUGGER_MANAGER_H

#include "map"
#include "list"
#include "vector"
#include "codelite_exports.h"
#include "wx/string.h"
#include "debugger.h"
#include "wx/arrstr.h"
#include "serialized_object.h"
#include "dynamiclibrary.h"

class EnvironmentConfig;
class BreakptMgr;

// sent when a "QueryLocals" command is completed (only for locals - not for function arguments)
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_QUERY_LOCALS;

// sent when a variable object createion is completed
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_VAROBJECT_CREATED;

// sent by codelite when a pane is needed to refresh its content
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_UPDATE_VIEWS;

// sent by the debugger when a "ListChildren" command is completed
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_LIST_CHILDREN;

// sent by the debugger after a successfull evaluation of variable object
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_VAROBJ_EVALUATED;

// sent by the debugger when a "disasseble" command returned
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_DISASSEBLE_OUTPUT;

// sent by the debugger when a "disasseble" current line command returns
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_DISASSEBLE_CURLINE;

// sent by the debugger when a "QueryFileLine" command has completed
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_QUERY_FILELINE;

// sent by the debugger in case "ResolveType" command failed (i.e. gdb could not resolve its type)
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_TYPE_RESOLVE_ERROR;

// sent by the debugger when 'ListRegisters' function completed
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_LIST_REGISTERS;

// Call stack
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_LIST_FRAMES;

// frame selected (user double clicked a stack entry)
extern WXDLLIMPEXP_SDK const wxEventType wxEVT_DEBUGGER_FRAME_SELECTED;

class WXDLLIMPEXP_SDK DebuggerMgr
{
    std::map<wxString, IDebugger*>   m_debuggers;
    wxArrayString                    m_pluginsDebuggers;
    wxString                         m_baseDir;
    std::vector< clDynamicLibrary* > m_dl;
    wxString                         m_activeDebuggerName;
    EnvironmentConfig*               m_env;

private:
    DebuggerMgr();
    virtual ~DebuggerMgr();

public:
    /**
     * Set the base dir for the debugger manager. On Linux this is
     * equivalent to $(HOME)/.liteeditor/, and on windows it is set
     * to C:\Program Files\LiteEditor\
     */
    void Initialize(wxEvtHandler *parent, EnvironmentConfig *env, const wxString &dir) {
        m_baseDir = dir;
        m_env = env;
    }

    const wxString& GetActiveDebuggerName() const {
        return m_activeDebuggerName;
    }
    /**
     * Load all available debuggers. This functions searches for dll/so/sl
     * which are located udner $(HOME)/.liteeditor/debuggers/ on Linux, and on Windows
     * under C:\Program Files\LiteEditor\debuggers\
     */
    bool LoadDebuggers();

    /**
     * Return list of all available debuggers which were loaded
     * successfully into the debugger manager
     */
    wxArrayString GetAvailableDebuggers();

    /**
     * Set the active debugger to be 'name'. If a debugger with name does not
     * exist, this function does nothing
     */
    void SetActiveDebugger(const wxString &name);

    /**
     * Return the currently selected debugger. The debugger is selected
     * based on previous call to SetActiveDebugger(). If no active debugger is
     * set, this function may return NULL
     */
    IDebugger *GetActiveDebugger();

    //get/set debugger information
    void SetDebuggerInformation(const wxString &name, const DebuggerInformation &info);
    bool GetDebuggerInformation(const wxString &name, DebuggerInformation &info);

    static DebuggerMgr& Get();
    static void Free();
};
#endif //DEBUGGER_MANAGER_H