summaryrefslogtreecommitdiffstats
path: root/src/VBox/Main/include/MachineDebuggerImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Main/include/MachineDebuggerImpl.h')
-rw-r--r--src/VBox/Main/include/MachineDebuggerImpl.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/VBox/Main/include/MachineDebuggerImpl.h b/src/VBox/Main/include/MachineDebuggerImpl.h
new file mode 100644
index 00000000..1bf40f0b
--- /dev/null
+++ b/src/VBox/Main/include/MachineDebuggerImpl.h
@@ -0,0 +1,176 @@
+/* $Id: MachineDebuggerImpl.h $ */
+/** @file
+ * VirtualBox COM class implementation
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef MAIN_INCLUDED_MachineDebuggerImpl_h
+#define MAIN_INCLUDED_MachineDebuggerImpl_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include "MachineDebuggerWrap.h"
+#include <iprt/log.h>
+#include <VBox/vmm/em.h>
+
+class Console;
+class Progress;
+
+class ATL_NO_VTABLE MachineDebugger :
+ public MachineDebuggerWrap
+{
+
+public:
+
+ DECLARE_COMMON_CLASS_METHODS (MachineDebugger)
+
+ HRESULT FinalConstruct();
+ void FinalRelease();
+
+ // public initializer/uninitializer for internal purposes only
+ HRESULT init (Console *aParent);
+ void uninit();
+
+ // "public-private methods"
+ void i_flushQueuedSettings();
+
+private:
+
+ // wrapped IMachineDeugger properties
+ HRESULT getSingleStep(BOOL *aSingleStep);
+ HRESULT setSingleStep(BOOL aSingleStep);
+ HRESULT getExecuteAllInIEM(BOOL *aExecuteAllInIEM);
+ HRESULT setExecuteAllInIEM(BOOL aExecuteAllInIEM);
+ HRESULT getLogEnabled(BOOL *aLogEnabled);
+ HRESULT setLogEnabled(BOOL aLogEnabled);
+ HRESULT getLogDbgFlags(com::Utf8Str &aLogDbgFlags);
+ HRESULT getLogDbgGroups(com::Utf8Str &aLogDbgGroups);
+ HRESULT getLogDbgDestinations(com::Utf8Str &aLogDbgDestinations);
+ HRESULT getLogRelFlags(com::Utf8Str &aLogRelFlags);
+ HRESULT getLogRelGroups(com::Utf8Str &aLogRelGroups);
+ HRESULT getLogRelDestinations(com::Utf8Str &aLogRelDestinations);
+ HRESULT getExecutionEngine(VMExecutionEngine_T *apenmEngine);
+ HRESULT getHWVirtExNestedPagingEnabled(BOOL *aHWVirtExNestedPagingEnabled);
+ HRESULT getHWVirtExVPIDEnabled(BOOL *aHWVirtExVPIDEnabled);
+ HRESULT getHWVirtExUXEnabled(BOOL *aHWVirtExUXEnabled);
+ HRESULT getOSName(com::Utf8Str &aOSName);
+ HRESULT getOSVersion(com::Utf8Str &aOSVersion);
+ HRESULT getPAEEnabled(BOOL *aPAEEnabled);
+ HRESULT getVirtualTimeRate(ULONG *aVirtualTimeRate);
+ HRESULT setVirtualTimeRate(ULONG aVirtualTimeRate);
+ HRESULT getUptime(LONG64 *aUptime);
+
+ // wrapped IMachineDeugger methods
+ HRESULT dumpGuestCore(const com::Utf8Str &aFilename,
+ const com::Utf8Str &aCompression);
+ HRESULT dumpHostProcessCore(const com::Utf8Str &aFilename,
+ const com::Utf8Str &aCompression);
+ HRESULT info(const com::Utf8Str &aName,
+ const com::Utf8Str &aArgs,
+ com::Utf8Str &aInfo);
+ HRESULT injectNMI();
+ HRESULT modifyLogGroups(const com::Utf8Str &aSettings);
+ HRESULT modifyLogFlags(const com::Utf8Str &aSettings);
+ HRESULT modifyLogDestinations(const com::Utf8Str &aSettings);
+ HRESULT readPhysicalMemory(LONG64 aAddress,
+ ULONG aSize,
+ std::vector<BYTE> &aBytes);
+ HRESULT writePhysicalMemory(LONG64 aAddress,
+ ULONG aSize,
+ const std::vector<BYTE> &aBytes);
+ HRESULT readVirtualMemory(ULONG aCpuId,
+ LONG64 aAddress,
+ ULONG aSize,
+ std::vector<BYTE> &aBytes);
+ HRESULT writeVirtualMemory(ULONG aCpuId,
+ LONG64 aAddress,
+ ULONG aSize,
+ const std::vector<BYTE> &aBytes);
+ HRESULT loadPlugIn(const com::Utf8Str &aName,
+ com::Utf8Str &aPlugInName);
+ HRESULT unloadPlugIn(const com::Utf8Str &aName);
+ HRESULT detectOS(com::Utf8Str &aOs);
+ HRESULT queryOSKernelLog(ULONG aMaxMessages,
+ com::Utf8Str &aDmesg);
+ HRESULT getRegister(ULONG aCpuId,
+ const com::Utf8Str &aName,
+ com::Utf8Str &aValue);
+ HRESULT getRegisters(ULONG aCpuId,
+ std::vector<com::Utf8Str> &aNames,
+ std::vector<com::Utf8Str> &aValues);
+ HRESULT setRegister(ULONG aCpuId,
+ const com::Utf8Str &aName,
+ const com::Utf8Str &aValue);
+ HRESULT setRegisters(ULONG aCpuId,
+ const std::vector<com::Utf8Str> &aNames,
+ const std::vector<com::Utf8Str> &aValues);
+ HRESULT dumpGuestStack(ULONG aCpuId,
+ com::Utf8Str &aStack);
+ HRESULT resetStats(const com::Utf8Str &aPattern);
+ HRESULT dumpStats(const com::Utf8Str &aPattern);
+ HRESULT getStats(const com::Utf8Str &aPattern,
+ BOOL aWithDescriptions,
+ com::Utf8Str &aStats);
+ HRESULT getCPULoad(ULONG aCpuId, ULONG *aPctExecuting, ULONG *aPctHalted, ULONG *aPctOther, LONG64 *aMsInterval) RT_OVERRIDE;
+ HRESULT takeGuestSample(const com::Utf8Str &aFilename, ULONG aUsInterval, LONG64 aUsSampleTime, ComPtr<IProgress> &pProgress);
+ HRESULT getUVMAndVMMFunctionTable(LONG64 aMagicVersion, LONG64 *aVMMFunctionTable, LONG64 *aUVM);
+
+ // private methods
+ bool i_queueSettings() const;
+ HRESULT i_getEmExecPolicyProperty(EMEXECPOLICY enmPolicy, BOOL *pfEnforced);
+ HRESULT i_setEmExecPolicyProperty(EMEXECPOLICY enmPolicy, BOOL fEnforce);
+
+ /** RTLogGetFlags, RTLogGetGroupSettings and RTLogGetDestinations function. */
+ typedef DECLCALLBACKTYPE(int, FNLOGGETSTR,(PRTLOGGER, char *, size_t));
+ /** Function pointer. */
+ typedef FNLOGGETSTR *PFNLOGGETSTR;
+ HRESULT i_logStringProps(PRTLOGGER pLogger, PFNLOGGETSTR pfnLogGetStr, const char *pszLogGetStr, Utf8Str *pstrSettings);
+
+ static DECLCALLBACK(int) i_dbgfProgressCallback(void *pvUser, unsigned uPercentage);
+
+ Console * const mParent;
+ /** @name Flags whether settings have been queued because they could not be sent
+ * to the VM (not up yet, etc.)
+ * @{ */
+ uint8_t maiQueuedEmExecPolicyParams[EMEXECPOLICY_END];
+ int mSingleStepQueued;
+ int mLogEnabledQueued;
+ uint32_t mVirtualTimeRateQueued;
+ bool mFlushMode;
+ /** @} */
+
+ /** @name Sample report related things.
+ * @{ */
+ /** Sample report handle. */
+ DBGFSAMPLEREPORT m_hSampleReport;
+ /** Progress object for the currently taken guest sample. */
+ ComObjPtr<Progress> m_Progress;
+ /** Filename to dump the report to. */
+ com::Utf8Str m_strFilename;
+ /** @} */
+};
+
+#endif /* !MAIN_INCLUDED_MachineDebuggerImpl_h */
+/* vi: set tabstop=4 shiftwidth=4 expandtab: */