VBoxDbgBase.cpp revision ec9a11eb28318df36cc0c39d53454ac2729e932e
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync/* $Id$ */
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync/** @file
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * VBox Debugger GUI - Base class.
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync */
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync/*
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync *
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * available from http://www.virtualbox.org. This file is free software;
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * you can redistribute it and/or modify it under the terms of the GNU
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * General Public License (GPL) as published by the Free Software
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync *
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * additional information or have any questions.
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync */
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync/*******************************************************************************
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync* Header Files *
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync*******************************************************************************/
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync#include <VBox/err.h>
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync#include <iprt/assert.h>
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync#include "VBoxDbgBase.h"
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsyncVBoxDbgBase::VBoxDbgBase(PVM pVM) : m_pVM(pVM), m_hGUIThread(RTThreadNativeSelf())
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync{
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync /*
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * Register
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync */
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync int rc = VMR3AtStateRegister(pVM, atStateChange, this);
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync AssertRC(rc);
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync}
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsyncVBoxDbgBase::~VBoxDbgBase()
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync{
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync /*
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync * If the VM is still around.
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync */
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync if (m_pVM)
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync {
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync int rc = VMR3AtStateDeregister(m_pVM, atStateChange, this);
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync AssertRC(rc);
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync m_pVM = NULL;
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync }
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync}
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsyncint VBoxDbgBase::stamReset(const QString &rPat)
210e87cc03f92d54681b81a81cc1fdbd48a9d2c8vboxsync{
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync#ifdef VBOXDBG_USE_QT4
fe02cc356f7bd01a7ffbcd6ceb8ca09bb1c35330vboxsync QByteArray Utf8Array = rPat.toUtf8();
const char *pszPat = !rPat.isEmpty() ? Utf8Array.constData() : NULL;
#else
const char *pszPat = !rPat.isEmpty() ? rPat : NULL;
#endif
if (m_pVM)
return STAMR3Reset(m_pVM, pszPat);
return VERR_INVALID_HANDLE;
}
int VBoxDbgBase::stamEnum(const QString &rPat, PFNSTAMR3ENUM pfnEnum, void *pvUser)
{
#ifdef VBOXDBG_USE_QT4
QByteArray Utf8Array = rPat.toUtf8();
const char *pszPat = !rPat.isEmpty() ? Utf8Array.constData() : NULL;
#else
const char *pszPat = !rPat.isEmpty() ? rPat : NULL;
#endif
if (m_pVM)
return STAMR3Enum(m_pVM, pszPat, pfnEnum, pvUser);
return VERR_INVALID_HANDLE;
}
int VBoxDbgBase::dbgcCreate(PDBGCBACK pBack, unsigned fFlags)
{
if (m_pVM)
return DBGCCreate(m_pVM, pBack, fFlags);
return VERR_INVALID_HANDLE;
}
/*static*/ DECLCALLBACK(void) VBoxDbgBase::atStateChange(PVM /*pVM*/, VMSTATE enmState, VMSTATE /*enmOldState*/, void *pvUser)
{
VBoxDbgBase *pThis = (VBoxDbgBase *)pvUser;
switch (enmState)
{
case VMSTATE_TERMINATED:
pThis->sigTerminated();
pThis->m_pVM = NULL;
break;
default:
break;
}
}
void VBoxDbgBase::sigTerminated()
{
}