MachineDebuggerImpl.cpp revision ebb971f52a832dafea0ea4e17f6b0f48776dfb8c
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox COM class implementation
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Copyright (C) 2006-2008 Sun Microsystems, Inc.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * available from http://www.virtualbox.org. This file is free software;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * General Public License (GPL) as published by the Free Software
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * additional information or have any questions.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/////////////////////////////////////////////////////////////////////////////
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/////////////////////////////////////////////////////////////////////////////
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync// constructor / destructor
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/////////////////////////////////////////////////////////////////////////////
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync// public initializer/uninitializer for internal purposes only
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/////////////////////////////////////////////////////////////////////////////
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Initializes the machine debugger object.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM result indicator
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aParent handle of our parent object
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Enclose the state transition NotReady->InInit->Ready */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Confirm a successful initialization */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Uninitializes the instance and sets the ready flag to FALSE.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Called either from FinalRelease() or by the parent when it gets destroyed.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /* Enclose the state transition Ready->InUninit->NotReady */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync// IMachineDebugger properties
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/////////////////////////////////////////////////////////////////////////////
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current singlestepping flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(Singlestep) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Sets the singlestepping flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnable new singlestepping flag
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(Singlestep) (BOOL aEnable)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current recompile user mode code flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(RecompileUser) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Sets the recompile user mode code flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnable new user mode code recompile flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(RecompileUser) (BOOL aEnable)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync EMRAWMODE rawModeFlag = aEnable ? EMRAW_RING3_DISABLE : EMRAW_RING3_ENABLE;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync int rcVBox = VMR3ReqCall (pVM, VMREQDEST_ANY, &pReq, RT_INDEFINITE_WAIT,
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync AssertMsgFailed (("Could not set raw mode flags to %d, rcVBox = %Rrc\n",
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current recompile supervisor code flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(RecompileSupervisor) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Sets the new recompile supervisor code flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnable new recompile supervisor code flag
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(RecompileSupervisor) (BOOL aEnable)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync EMRAWMODE rawModeFlag = aEnable ? EMRAW_RING0_DISABLE : EMRAW_RING0_ENABLE;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync int rcVBox = VMR3ReqCall (pVM, VMREQDEST_ANY, &pReq, RT_INDEFINITE_WAIT,
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync AssertMsgFailed (("Could not set raw mode flags to %d, rcVBox = %Rrc\n",
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current patch manager enabled flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(PATMEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Set the new patch manager enabled flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnable new patch manager enabled flag
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(PATMEnabled) (BOOL aEnable)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Set the new patch manager enabled flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param new patch manager enabled flag
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current code scanner enabled flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(CSAMEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Sets the new code scanner enabled flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnable new code scanner enabled flag
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(CSAMEnabled) (BOOL aEnable)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo handle error case */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the log enabled / disabled status.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(LogEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync const PRTLOGGER pLogInstance = RTLogDefaultInstance();
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync *aEnabled = pLogInstance && !(pLogInstance->fFlags & RTLOGFLAGS_DISABLED);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Enables or disables logging.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled The new code log state.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(LogEnabled) (BOOL aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync int vrc = DBGFR3LogModifyFlags (pVM, aEnabled ? "enabled" : "disabled");
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo handle error code. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current hardware virtualization flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(HWVirtExEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current nested paging flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(HWVirtExNestedPagingEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync *aEnabled = HWACCMR3IsNestedPagingActive (pVM.raw());
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current VPID flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(HWVirtExVPIDEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current PAE flag.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aEnabled address of result variable
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(PAEEnabled) (BOOL *aEnabled)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current virtual time rate.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aPct Where to store the rate.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMGETTER(VirtualTimeRate) (ULONG *aPct)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Returns the current virtual time rate.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @returns COM status code.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @param aPct Where to store the rate.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncSTDMETHODIMP MachineDebugger::COMSETTER(VirtualTimeRate) (ULONG aPct)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync // queue the request
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync /** @todo handle error code. */
if (!aVm)
return E_POINTER;
return S_OK;
return S_OK;
return S_OK;
return E_FAIL;
char *pszSnapshot;
return S_OK;
mFlushMode = true;
if (mSinglestepQueued != ~0)
mSinglestepQueued = ~0;
if (mRecompileUserQueued != ~0)
mRecompileUserQueued = ~0;
if (mRecompileSupervisorQueued != ~0)
if (mPatmEnabledQueued != ~0)
mPatmEnabledQueued = ~0;
if (mCsamEnabledQueued != ~0)
mCsamEnabledQueued = ~0;
if (mLogEnabledQueued != ~0)
mLogEnabledQueued = ~0;
mVirtualTimeRateQueued = ~0;
mFlushMode = false;
if (!mFlushMode)