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);
}
}
}
}
|