File: XDebugRunCmdHandler.cpp

package info (click to toggle)
codelite 14.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 112,816 kB
  • sloc: cpp: 483,662; ansic: 150,144; php: 9,569; lex: 4,186; python: 3,417; yacc: 2,820; sh: 1,147; makefile: 52; xml: 13
file content (56 lines) | stat: -rw-r--r-- 2,137 bytes parent folder | download | duplicates (3)
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
#include "XDebugRunCmdHandler.h"
#include <wx/socket.h>
#include <wx/xml/xml.h>
#include <file_logger.h>
#include "XDebugManager.h"
#include <xmlutils.h>
#include <imanager.h>
#include "php.h" // PhpPlugin
#include <event_notifier.h>
#include "php_utils.h"
#include "xdebugevent.h"
#include <wx/msgdlg.h>

XDebugRunCmdHandler::XDebugRunCmdHandler(XDebugManager* mgr, int transcationId)
    : XDebugCommandHandler(mgr, transcationId)
{
}

XDebugRunCmdHandler::~XDebugRunCmdHandler()
{
}

void XDebugRunCmdHandler::Process(const wxXmlNode* response)
{
    // a reply to the "Run" command has arrived
    wxString status = response->GetAttribute("status");
    if ( status == "stopping" ) {
        CL_DEBUG("CodeLite >>> xdebug entered status 'stopping'");
        m_mgr->SendStopCommand();
        
    } else if ( status == "break" ) {
        // Break point was hit
        CL_DEBUG("CodeLite >>> Breakpoint was hit");
        wxXmlNode* msg = XmlUtils::FindFirstByTagName(response, "xdebug:message");
        if ( msg ) {
            wxString filename = msg->GetAttribute("filename");
            int line_number = XmlUtils::ReadLong(msg, "lineno");
            
            wxString localFile = ::MapRemoteFileToLocalFile(filename);
            CL_DEBUG("Mapping remote file: %s => %s", filename, localFile);
            wxFileName fnFilename( localFile );
            if(fnFilename.Exists()) {
                // Notify about control
                XDebugEvent focusEvent(wxEVT_XDEBUG_IDE_GOT_CONTROL);
                focusEvent.SetFileName( fnFilename.GetFullPath() );
                focusEvent.SetLineNumber( line_number - 1 ); // scintilla is counting from 0
                EventNotifier::Get()->AddPendingEvent( focusEvent );
            } else {
                wxString message;
                message << _("Failed to map remote file: ") << filename << "\n"
                        << _("Check your project settings->Debug to define folder mapping");
                ::wxMessageBox(message, "CodeLite", wxICON_WARNING|wxOK|wxCENTER);
            }
        }
    }
}