MachineDebuggerImpl.cpp revision da6c95666f29b00894dfb9d110b74d9e1c4f1d46
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * VBox IMachineDebugger COM class implementation (VBoxC).
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2013 Oracle Corporation
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * available from http://www.virtualbox.org. This file is free software;
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * you can redistribute it and/or modify it under the terms of the GNU
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * General Public License (GPL) as published by the Free Software
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync/*******************************************************************************
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync* Header Files *
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync*******************************************************************************/
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync// constructor / destructor
14fd2cc4f028c3f5e41786f13f035762a35533cfvboxsync/////////////////////////////////////////////////////////////////////////////
uninit();
// public initializer/uninitializer for internal purposes only
mSingleStepQueued = ~0;
mRecompileUserQueued = ~0;
mPatmEnabledQueued = ~0;
mCsamEnabledQueued = ~0;
mLogEnabledQueued = ~0;
mVirtualTimeRateQueued = ~0;
mFlushMode = false;
return S_OK;
mFlushMode = false;
return hrc;
return hrc;
if (i_queueSettings())
bool fEnforced = false;
return hrc;
if (i_queueSettings())
return hrc;
#ifdef VBOX_WITH_RAW_MODE
*aPATMEnabled = false;
return S_OK;
#ifdef VBOX_WITH_RAW_MODE
if (i_queueSettings())
return S_OK;
if (aPATMEnabled)
return S_OK;
#ifdef VBOX_WITH_RAW_MODE
*aCSAMEnabled = false;
return S_OK;
#ifdef VBOX_WITH_RAW_MODE
if (i_queueSettings())
return S_OK;
if (aCSAMEnabled)
return S_OK;
#ifdef LOG_ENABLED
*aLogEnabled = false;
return S_OK;
if (i_queueSettings())
return S_OK;
#ifdef LOG_ENABLED
return S_OK;
return hrc;
if (!pLogger)
return S_OK;
return hrc;
AssertReturn(rc == VERR_BUFFER_OVERFLOW, setError(VBOX_E_IPRT_ERROR, tr("%s returned %Rrc"), pszLogGetStr, rc));
HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetFlags, "RTGetFlags", aLogDbgFlags);
return hrc;
HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", aLogDbgGroups);
return hrc;
HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", aLogDbgDestinations);
return hrc;
HRESULT hrc = i_logStringProps(RTLogRelDefaultInstance(), RTLogGetFlags, "RTGetFlags", aLogRelFlags);
return hrc;
HRESULT hrc = i_logStringProps(RTLogRelDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", aLogRelGroups);
return hrc;
HRESULT hrc = i_logStringProps(RTLogRelDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", aLogRelDestinations);
return hrc;
*aHWVirtExEnabled = false;
return S_OK;
*aHWVirtExNestedPagingEnabled = false;
return S_OK;
*aHWVirtExVPIDEnabled = false;
return S_OK;
*aHWVirtExUXEnabled = false;
return S_OK;
return hrc;
return hrc;
*aPAEEnabled = false;
return S_OK;
return hrc;
if (i_queueSettings())
hrc = setError(VBOX_E_VM_ERROR, tr("TMR3SetWarpDrive(, %u) failed with rc=%Rrc"), aVirtualTimeRate, vrc);
return hrc;
return hrc;
HRESULT MachineDebugger::dumpGuestCore(const com::Utf8Str &aFilename, const com::Utf8Str &aCompression)
return hrc;
HRESULT MachineDebugger::dumpHostProcessCore(const com::Utf8Str &aFilename, const com::Utf8Str &aCompression)
typedef struct MACHINEDEBUGGERINOFHLP
char *pszBuf;
bool fOutOfMemory;
static DECLCALLBACK(size_t) MachineDebuggerInfoOutput(void *pvArg, const char *pachChars, size_t cbChars)
return cbChars;
static DECLCALLBACK(void) MachineDebuggerInfoPrintfV(PCDBGFINFOHLP pHlp, const char *pszFormat, va_list va)
HRESULT MachineDebugger::info(const com::Utf8Str &aName, const com::Utf8Str &aArgs, com::Utf8Str &aInfo)
return hrc;
return hrc;
return hrc;
return hrc;
return hrc;
HRESULT MachineDebugger::readPhysicalMemory(LONG64 aAddress, ULONG aSize, std::vector<BYTE> &aBytes)
HRESULT MachineDebugger::writePhysicalMemory(LONG64 aAddress, ULONG aSize, const std::vector<BYTE> &aBytes)
HRESULT MachineDebugger::readVirtualMemory(ULONG aCpuId, LONG64 aAddress, ULONG aSize, std::vector<BYTE> &aBytes)
HRESULT MachineDebugger::writeVirtualMemory(ULONG aCpuId, LONG64 aAddress, ULONG aSize, const std::vector<BYTE> &aBytes)
return hrc;
DECLINLINE(HRESULT) formatRegisterValue(Bstr *a_pbstr, PCDBGFREGVAL a_pValue, DBGFREGVALTYPE a_enmType)
return E_UNEXPECTED;
return S_OK;
return hrc;
HRESULT MachineDebugger::getRegisters(ULONG aCpuId, std::vector<com::Utf8Str> &aNames, std::vector<com::Utf8Str> &aValues)
if (paRegs)
return hrc;
HRESULT MachineDebugger::setRegister(ULONG aCpuId, const com::Utf8Str &aName, const com::Utf8Str &aValue)
return S_OK;
return S_OK;
HRESULT MachineDebugger::getStats(const com::Utf8Str &aPattern, BOOL aWithDescriptions, com::Utf8Str &aStats)
char *pszSnapshot;
return S_OK;
mFlushMode = true;
if (mSingleStepQueued != ~0)
mSingleStepQueued = ~0;
for (unsigned i = 0; i < EMEXECPOLICY_END; i++)
if (mPatmEnabledQueued != ~0)
mPatmEnabledQueued = ~0;
if (mCsamEnabledQueued != ~0)
mCsamEnabledQueued = ~0;
if (mLogEnabledQueued != ~0)
mLogEnabledQueued = ~0;
mVirtualTimeRateQueued = ~0;
mFlushMode = false;
if (!mFlushMode)
switch (machineState)
case MachineState_Running:
case MachineState_Paused:
case MachineState_Stuck:
case MachineState_Teleporting: