VirtualBox

Changeset 96888 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Sep 26, 2022 7:29:50 PM (2 years ago)
Author:
vboxsync
Message:

Main,FE/VBoxManage: Implement possiblity to configure some of the guest debugging facilities to make it more accessible, bugref:1098

Location:
trunk/src/VBox/Main
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/Makefile.kmk

    r96572 r96888  
    648648        src-server/CloudNetworkImpl.cpp \
    649649        ,) \
     650        src-server/GuestDebugControlImpl.cpp \
    650651        src-server/GuestOSTypeImpl.cpp \
    651652        src-server/HostDnsService.cpp \
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r96788 r96888  
    66726672  <interface
    66736673    name="IMachine" extends="$unknown"
    6674     uuid="9fbd57c7-e1b2-4baa-bbfb-ae831c06f32b"
     6674    uuid="300763af-5d6b-46e6-aa96-273eac15538a"
    66756675    wsmap="managed"
    66766676    rest="managed"
     
    74467446        Key store used for encrypting the log files.
    74477447        Internal use only for now.
     7448      </desc>
     7449    </attribute>
     7450
     7451    <attribute name="guestDebugControl" type="IGuestDebugControl" readonly="yes">
     7452      <desc>
     7453        Guest debugging configuration.
    74487454      </desc>
    74497455    </attribute>
     
    2391923925  <interface
    2392023926    name="IInternalSessionControl" extends="$unknown"
    23921     uuid="a797fb40-7e04-4aa5-88c5-299aa0454577"
     23927    uuid="5045c372-2e8f-4d9e-ad9d-121ab1661146"
    2392223928    internal="yes"
    2392323929    wsmap="suppress"
     
    2431924325      </desc>
    2432024326      <param name="global" type="boolean" dir="in"/>
     24327    </method>
     24328
     24329    <method name="onGuestDebugControlChange">
     24330      <desc>
     24331        Triggered when settings of the guest debug settings of the
     24332        associated virtual machine have changed.
     24333
     24334        <result name="VBOX_E_INVALID_VM_STATE">
     24335          Session state prevents operation.
     24336        </result>
     24337        <result name="VBOX_E_INVALID_OBJECT_STATE">
     24338          Session type prevents operation.
     24339        </result>
     24340
     24341      </desc>
     24342      <param name="guestDebugControl" type="IGuestDebugControl" dir="in"/>
    2432124343    </method>
    2432224344
     
    2607126093
    2607226094  <!--
     26095  // IGuestDebugControl
     26096  /////////////////////////////////////////////////////////////////////////
     26097  -->
     26098  <enum
     26099    name="GuestDebugProvider"
     26100    uuid="acdaddc5-aa0f-4f2e-be1f-a9be2828d24a"
     26101    >
     26102    <desc>
     26103      The enabled guest debug provider. This enumeration represents possible
     26104      values for the <link to="IGuestDebugControl::debugProvider"/> attribute.
     26105    </desc>
     26106    <const name="None"      value="0">
     26107      <desc>Guest debugging is disabled.</desc>
     26108    </const>
     26109    <const name="Native"    value="1">
     26110      <desc>The native debugger console is enabled.</desc>
     26111    </const>
     26112    <const name="GDB"       value="2">
     26113      <desc>The GDB remote stub is enabled.</desc>
     26114    </const>
     26115    <const name="KD"        value="3">
     26116      <desc>The WinDbg/KD remote stub is enabled.</desc>
     26117    </const>
     26118  </enum>
     26119
     26120  <enum
     26121    name="GuestDebugIoProvider"
     26122    uuid="0cf00b1b-2ff7-414c-81c6-6cf410eaec4a"
     26123    >
     26124    <desc>
     26125      The enabled guest debug I/O provider. This enumeration represents possible
     26126      values for the <link to="IGuestDebugControl::debugIoProvider"/> attribute.
     26127    </desc>
     26128    <const name="None"      value="0">
     26129      <desc>No connection available (only useful with
     26130        <link to="GuestDebugProvider::None"/>).
     26131      </desc>
     26132    </const>
     26133    <const name="TCP"       value="1">
     26134      <desc>The remote stub is available through a TCP connection.</desc>
     26135    </const>
     26136    <const name="UDP"       value="2">
     26137      <desc>The remote stub is available through a UDP connection.</desc>
     26138    </const>
     26139    <const name="IPC"       value="3">
     26140      <desc>The remote stub is available through a IPC connection,
     26141        namely a named pipe on Windows or a unix socket on other hosts.</desc>
     26142    </const>
     26143  </enum>
     26144
     26145  <interface
     26146    name="IGuestDebugControl" extends="$unknown"
     26147    uuid="1474bb3a-f096-4cd7-a857-8d8e3cea7331"
     26148    wsmap="managed"
     26149    rest="managed"
     26150    reservedMethods="2" reservedAttributes="2"
     26151    >
     26152    <desc>
     26153      Controls the guest debug settings of one virtual machine.
     26154    </desc>
     26155
     26156    <attribute name="debugProvider" type="GuestDebugProvider">
     26157      <desc>The currently active debug provider.</desc>
     26158    </attribute>
     26159
     26160    <attribute name="debugIoProvider" type="GuestDebugIoProvider">
     26161      <desc>The I/O backend for the selected debug provider.</desc>
     26162    </attribute>
     26163
     26164    <attribute name="debugAddress" type="wstring">
     26165      <desc>
     26166        The address to connect to or listen on,
     26167        depending on the type.
     26168      </desc>
     26169    </attribute>
     26170
     26171    <attribute name="debugPort" type="unsigned long">
     26172      <desc>
     26173        The port to listen on or connect to, depending on the selected I/O
     26174        provider. Might be ignored by some providers.
     26175      </desc>
     26176    </attribute>
     26177  </interface>
     26178
     26179  <!--
    2607326180  // IVirtualBoxClient
    2607426181  /////////////////////////////////////////////////////////////////////////
     
    2613426241  <enum
    2613526242    name="VBoxEventType"
    26136     uuid="05dfb131-4deb-4125-9bcd-96518026b423"
     26243    uuid="e4c5252d-7d1a-4051-8cfb-5b2d7a73d992"
    2613726244    >
    2613826245
     
    2662326730      </desc>
    2662426731    </const>
     26732    <const name="OnGuestDebugControlChanged" value="117">
     26733      <desc>
     26734        See <link to="IGuestDebugControlChangedEvent">IGuestDebugControlChangedEvent</link>.
     26735      </desc>
     26736    </const>
    2662526737    <!-- End event marker -->
    26626     <const name="End" value="117">
     26738    <const name="End" value="118">
    2662726739      <desc>
    2662826740        Must be last event, used for iterations and structures relying on numerical event values.
     
    2895829070    </attribute>
    2895929071
     29072  </interface>
     29073
     29074  <interface
     29075    name="IGuestDebugControlChangedEvent" extends="IEvent"
     29076    uuid="a3d2799e-d3ad-4f73-91ef-7d839689f6d6"
     29077    wsmap="managed" autogen="VBoxEvent" id="OnGuestDebugControlChanged"
     29078    >
     29079    <desc>
     29080      Notification when a property of the <link to="IMachine::guestDebugControl">guest debug</link>
     29081      settings changes. Interested callees should use IGuestDebugControl methods and attributes
     29082      to find out what has changed.
     29083    </desc>
     29084    <attribute name="guestDebugControl" type="IGuestDebugControl" readonly="yes">
     29085      <desc>
     29086        Guest debug control object that is subject to change.
     29087      </desc>
     29088    </attribute>
    2896029089  </interface>
    2896129090
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r96407 r96888  
    228228    HRESULT i_onStorageDeviceChange(IMediumAttachment *aMediumAttachment, BOOL aRemove, BOOL aSilent);
    229229    HRESULT i_onExtraDataChange(const Bstr &aMachineId, const Bstr &aKey, const Bstr &aVal);
     230    HRESULT i_onGuestDebugControlChange(IGuestDebugControl *aGuestDebugControl);
    230231
    231232    HRESULT i_getGuestProperty(const Utf8Str &aName, Utf8Str *aValue, LONG64 *aTimestamp, Utf8Str *aFlags);
  • trunk/src/VBox/Main/include/MachineImpl.h

    r96407 r96888  
    5252#include "TrustedPlatformModuleImpl.h"
    5353#include "NvramStoreImpl.h"
     54#include "GuestDebugControlImpl.h"
    5455#ifdef VBOX_WITH_RESOURCE_USAGE_API
    5556# include "Performance.h"
     
    526527        IsModified_TrustedPlatformModule = 0x008000,
    527528        IsModified_NvramStore            = 0x010000,
     529        IsModified_GuestDebugControl     = 0x020000,
    528530    };
    529531
     
    576578                                            BOOL /* silent */) { return S_OK; }
    577579    virtual HRESULT i_onRecordingChange(BOOL /* aEnable */) { return S_OK; }
     580    virtual HRESULT i_onGuestDebugControlChange(IGuestDebugControl * /* guestDebugControl */) { return S_OK; }
     581
    578582
    579583    HRESULT i_saveRegistryEntry(settings::MachineRegistryEntry &data);
     
    840844    const ComObjPtr<GraphicsAdapter>   mGraphicsAdapter;
    841845    const ComObjPtr<BandwidthControl>  mBandwidthControl;
     846    const ComObjPtr<GuestDebugControl> mGuestDebugControl;
    842847
    843848    const ComObjPtr<TrustedPlatformModule> mTrustedPlatformModule;
     
    10351040    HRESULT getLogKeyId(com::Utf8Str &aKeyId);
    10361041    HRESULT getLogKeyStore(com::Utf8Str &aKeyStore);
     1042    HRESULT getGuestDebugControl(ComPtr<IGuestDebugControl> &aGuestDebugControl);
    10371043
    10381044    // wrapped IMachine methods
     
    14331439    HRESULT i_onStorageDeviceChange(IMediumAttachment *aMediumAttachment, BOOL aRemove, BOOL aSilent);
    14341440    HRESULT i_onCPUExecutionCapChange(ULONG aCpuExecutionCap);
     1441    HRESULT i_onGuestDebugControlChange(IGuestDebugControl *guestDebugControl);
    14351442
    14361443    bool i_hasMatchingUSBFilter(const ComObjPtr<HostUSBDevice> &aDevice, ULONG *aMaskedIfs);
  • trunk/src/VBox/Main/include/SessionImpl.h

    r96407 r96888  
    123123    HRESULT onUSBControllerChange();
    124124    HRESULT onSharedFolderChange(BOOL aGlobal);
     125    HRESULT onGuestDebugControlChange(const ComPtr<IGuestDebugControl> &aGuestDebugControl);
    125126    HRESULT onUSBDeviceAttach(const ComPtr<IUSBDevice> &aDevice,
    126127                              const ComPtr<IVirtualBoxErrorInfo> &aError,
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r96407 r96888  
    60496049    return rc;
    60506050}
     6051
     6052/**
     6053 * Called by IInternalSessionControl::OnGuestDebugControlChange().
     6054 */
     6055HRESULT Console::i_onGuestDebugControlChange(IGuestDebugControl *aGuestDebugControl)
     6056{
     6057    LogFlowThisFunc(("\n"));
     6058
     6059    AutoCaller autoCaller(this);
     6060    AssertComRCReturnRC(autoCaller.rc());
     6061
     6062    HRESULT hrc = S_OK;
     6063
     6064    /* don't trigger changes if the VM isn't running */
     6065    SafeVMPtrQuiet ptrVM(this);
     6066    if (ptrVM.isOk())
     6067    {
     6068        /// @todo
     6069    }
     6070
     6071    if (SUCCEEDED(hrc))
     6072        ::FireGuestDebugControlChangedEvent(mEventSource, aGuestDebugControl);
     6073
     6074    LogFlowThisFunc(("Leaving rc=%#x\n", S_OK));
     6075    return hrc;
     6076}
     6077
    60516078
    60526079/**
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r96854 r96888  
    37693769            strFile.append("dbgc-init");
    37703770            InsertConfigString(pDbgc, "GlobalInitScript", strFile);
     3771
     3772            /*
     3773             * Configure guest debug settings.
     3774             */
     3775            ComObjPtr<IGuestDebugControl> ptrGstDbgCtrl;
     3776            GuestDebugProvider_T enmGstDbgProvider = GuestDebugProvider_None;
     3777
     3778            hrc = pMachine->COMGETTER(GuestDebugControl)(ptrGstDbgCtrl.asOutParam());           H();
     3779            hrc = ptrGstDbgCtrl->COMGETTER(DebugProvider)(&enmGstDbgProvider);                  H();
     3780            if (enmGstDbgProvider != GuestDebugProvider_None)
     3781            {
     3782                GuestDebugIoProvider_T enmGstDbgIoProvider = GuestDebugIoProvider_None;
     3783                hrc = ptrGstDbgCtrl->COMGETTER(DebugIoProvider)(&enmGstDbgIoProvider);          H();
     3784                hrc = ptrGstDbgCtrl->COMGETTER(DebugAddress)(bstr.asOutParam());                H();
     3785                Utf8Str strAddress = bstr;
     3786                bstr.setNull();
     3787
     3788                ULONG ulPort = 0;
     3789                hrc = ptrGstDbgCtrl->COMGETTER(DebugPort)(&ulPort);                             H();
     3790
     3791                PCFGMNODE pDbgSettings;
     3792                InsertConfigNode(pDbgc, "Dbg", &pDbgSettings);
     3793                InsertConfigString(pDbgSettings, "Address", strAddress);
     3794                InsertConfigInteger(pDbgSettings, "Port", ulPort);
     3795
     3796                switch (enmGstDbgProvider)
     3797                {
     3798                    case GuestDebugProvider_Native:
     3799                        InsertConfigString(pDbgSettings, "StubType", "Native");
     3800                        break;
     3801                    case GuestDebugProvider_GDB:
     3802                        InsertConfigString(pDbgSettings, "StubType", "Gdb");
     3803                        break;
     3804                    case GuestDebugProvider_KD:
     3805                        InsertConfigString(pDbgSettings, "StubType", "Kd");
     3806                        break;
     3807                    default:
     3808                        AssertFailed();
     3809                        break;
     3810                }
     3811
     3812                switch (enmGstDbgIoProvider)
     3813                {
     3814                    case GuestDebugIoProvider_TCP:
     3815                        InsertConfigString(pDbgSettings, "Provider", "tcp");
     3816                        break;
     3817                    case GuestDebugIoProvider_UDP:
     3818                        InsertConfigString(pDbgSettings, "Provider", "udp");
     3819                        break;
     3820                    case GuestDebugIoProvider_IPC:
     3821                        InsertConfigString(pDbgSettings, "Provider", "ipc");
     3822                        break;
     3823                    default:
     3824                        AssertFailed();
     3825                        break;
     3826                }
     3827            }
    37713828        }
    37723829    }
  • trunk/src/VBox/Main/src-client/SessionImpl.cpp

    r96407 r96888  
    874874}
    875875
     876HRESULT Session::onGuestDebugControlChange(const ComPtr<IGuestDebugControl> &aGuestDebugControl)
     877{
     878    LogFlowThisFunc(("\n"));
     879
     880    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     881    AssertReturn(mState == SessionState_Locked, VBOX_E_INVALID_VM_STATE);
     882    AssertReturn(mType == SessionType_WriteLock, VBOX_E_INVALID_OBJECT_STATE);
     883#ifndef VBOX_COM_INPROC_API_CLIENT
     884    AssertReturn(mConsole, VBOX_E_INVALID_OBJECT_STATE);
     885
     886    return mConsole->i_onGuestDebugControlChange(aGuestDebugControl);
     887#else
     888    RT_NOREF(aSerialPort);
     889    return S_OK;
     890#endif
     891}
     892
    876893HRESULT Session::onUSBDeviceAttach(const ComPtr<IUSBDevice> &aDevice,
    877894                                   const ComPtr<IVirtualBoxErrorInfo> &aError,
  • trunk/src/VBox/Main/src-server/MachineImpl.cpp

    r96854 r96888  
    32673267    aKeyStore = com::Utf8Str::Empty;
    32683268#endif
     3269
     3270    return S_OK;
     3271}
     3272
     3273HRESULT Machine::getGuestDebugControl(ComPtr<IGuestDebugControl> &aGuestDebugControl)
     3274{
     3275    mGuestDebugControl.queryInterfaceTo(aGuestDebugControl.asOutParam());
    32693276
    32703277    return S_OK;
     
    86968703    mBandwidthControl->init(this);
    86978704
     8705    /* create the guest debug control object */
     8706    unconst(mGuestDebugControl).createObject();
     8707    mGuestDebugControl->init(this);
     8708
    86988709    return S_OK;
    86998710}
     
    87188729
    87198730    /* tell all our other child objects we've been uninitialized */
     8731    if (mGuestDebugControl)
     8732    {
     8733        mGuestDebugControl->uninit();
     8734        unconst(mGuestDebugControl).setNull();
     8735    }
     8736
    87208737    if (mBandwidthControl)
    87218738    {
     
    95739590    mHWData->mDebugging = *pDbg;
    95749591    /* no more processing currently required, this will probably change. */
     9592
     9593    HRESULT rc = mGuestDebugControl->i_loadSettings(*pDbg);
     9594    if (FAILED(rc)) return rc;
     9595
    95759596    return S_OK;
    95769597}
     
    1095610977#endif /* VBOX_WITH_GUEST_PROPS defined */
    1095710978
    10958         *pDbg = mHWData->mDebugging;
     10979        rc = mGuestDebugControl->i_saveSettings(mHWData->mDebugging);
     10980        if (FAILED(rc)) throw rc;
     10981
     10982        *pDbg = mHWData->mDebugging; /// @todo r=aeichner: Move this to guest debug control. */
    1095910983        *pAutostart = mHWData->mAutostart;
    1096010984
     
    1236412388        mBandwidthControl->i_rollback();
    1236512389
     12390    if (mGuestDebugControl && (mData->flModifications & IsModified_GuestDebugControl))
     12391        mGuestDebugControl->i_rollback();
     12392
    1236612393    if (!mHWData.isNull())
    1236712394        mNetworkAdapters.resize(Global::getMaxNetworkAdapters(mHWData->mChipsetType));
     
    1243412461        }
    1243512462
     12463        if (flModifications & IsModified_GuestDebugControl)
     12464            that->i_onGuestDebugControlChange(mGuestDebugControl);
    1243612465
    1243712466#if 0
     
    1247912508    mUSBDeviceFilters->i_commit();
    1248012509    mBandwidthControl->i_commit();
     12510    mGuestDebugControl->i_commit();
    1248112511
    1248212512    /* Since mNetworkAdapters is a list which might have been changed (resized)
     
    1273512765    mUSBDeviceFilters->i_copyFrom(aThat->mUSBDeviceFilters);
    1273612766    mBandwidthControl->i_copyFrom(aThat->mBandwidthControl);
     12767    mGuestDebugControl->i_copyFrom(aThat->mGuestDebugControl);
    1273712768
    1273812769    /* create private copies of all controllers */
     
    1315213183    mBandwidthControl->init(this, aMachine->mBandwidthControl);
    1315313184
     13185    unconst(mGuestDebugControl).createObject();
     13186    mGuestDebugControl->init(this, aMachine->mGuestDebugControl);
     13187
    1315413188    /* default is to delete saved state on Saved -> PoweredOff transition */
    1315513189    mRemoveSavedState = true;
     
    1500115035
    1500215036/**
     15037 *  @note Locks this object for reading.
     15038 */
     15039HRESULT SessionMachine::i_onGuestDebugControlChange(IGuestDebugControl *guestDebugControl)
     15040{
     15041    LogFlowThisFunc(("\n"));
     15042
     15043    AutoCaller autoCaller(this);
     15044    AssertComRCReturn(autoCaller.rc(), autoCaller.rc());
     15045
     15046    ComPtr<IInternalSessionControl> directControl;
     15047    {
     15048        AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     15049        if (mData->mSession.mLockType == LockType_VM)
     15050            directControl = mData->mSession.mDirectControl;
     15051    }
     15052
     15053    /* ignore notifications sent after #OnSessionEnd() is called */
     15054    if (!directControl)
     15055        return S_OK;
     15056
     15057    return directControl->OnGuestDebugControlChange(guestDebugControl);
     15058}
     15059
     15060/**
    1500315061 *  Returns @c true if this machine's USB controller reports it has a matching
    1500415062 *  filter for the given USB device and @c false otherwise.
  • trunk/src/VBox/Main/src-server/SnapshotImpl.cpp

    r96407 r96888  
    12381238    unconst(mBandwidthControl).createObject();
    12391239    rc = mBandwidthControl->initCopy(this, pMachine->mBandwidthControl);
     1240    if (FAILED(rc)) return rc;
     1241
     1242    unconst(mGuestDebugControl).createObject();
     1243    rc = mGuestDebugControl->initCopy(this, pMachine->mGuestDebugControl);
    12401244    if (FAILED(rc)) return rc;
    12411245
     
    13531357    unconst(mBandwidthControl).createObject();
    13541358    mBandwidthControl->init(this);
     1359
     1360    unconst(mGuestDebugControl).createObject();
     1361    mGuestDebugControl->init(this);
    13551362
    13561363    /* load hardware and storage settings */
  • trunk/src/VBox/Main/xml/Settings.cpp

    r96407 r96888  
    41764176    fTracingEnabled(false),
    41774177    fAllowTracingToAccessVM(false),
    4178     strTracingConfig()
     4178    strTracingConfig(),
     4179    enmDbgProvider(GuestDebugProvider_None),
     4180    enmIoProvider(GuestDebugIoProvider_None),
     4181    strAddress(),
     4182    ulPort(0)
    41794183{
    41804184}
     
    41874191    return !fTracingEnabled
    41884192        && !fAllowTracingToAccessVM
    4189         && strTracingConfig.isEmpty();
     4193        && strTracingConfig.isEmpty()
     4194        && enmDbgProvider == GuestDebugProvider_None
     4195        && enmIoProvider == GuestDebugIoProvider_None
     4196        && strAddress.isEmpty()
     4197        && ulPort == 0;
    41904198}
    41914199
     
    42004208        || (   fTracingEnabled          == d.fTracingEnabled
    42014209            && fAllowTracingToAccessVM  == d.fAllowTracingToAccessVM
    4202             && strTracingConfig         == d.strTracingConfig);
     4210            && strTracingConfig         == d.strTracingConfig
     4211            && enmDbgProvider           == d.enmDbgProvider
     4212            && enmIoProvider            == d.enmIoProvider
     4213            && strAddress               == d.strAddress
     4214            && ulPort                   == d.ulPort);
    42034215}
    42044216
     
    62226234        pelmTracing->getAttributeValue("allowTracingToAccessVM", dbg.fAllowTracingToAccessVM);
    62236235        pelmTracing->getAttributeValue("config", dbg.strTracingConfig);
     6236    }
     6237
     6238    const xml::ElementNode *pelmGuestDebug = elmDebugging.findChildElement("GuestDebug");
     6239    if (pelmGuestDebug)
     6240    {
     6241        Utf8Str strTmp;
     6242        pelmGuestDebug->getAttributeValue("provider", strTmp);
     6243        if (strTmp == "None")
     6244            dbg.enmDbgProvider = GuestDebugProvider_None;
     6245        else if (strTmp == "GDB")
     6246            dbg.enmDbgProvider = GuestDebugProvider_GDB;
     6247        else if (strTmp == "KD")
     6248            dbg.enmDbgProvider = GuestDebugProvider_KD;
     6249        else
     6250            throw ConfigFileError(this, pelmGuestDebug, N_("Invalid value '%s' for GuestDebug/@provider attribute"), strTmp.c_str());
     6251
     6252        pelmGuestDebug->getAttributeValue("io", strTmp);
     6253        if (strTmp == "None")
     6254            dbg.enmIoProvider = GuestDebugIoProvider_None;
     6255        else if (strTmp == "TCP")
     6256            dbg.enmIoProvider = GuestDebugIoProvider_TCP;
     6257        else if (strTmp == "UDP")
     6258            dbg.enmIoProvider = GuestDebugIoProvider_UDP;
     6259        else if (strTmp == "IPC")
     6260            dbg.enmIoProvider = GuestDebugIoProvider_IPC;
     6261        else
     6262            throw ConfigFileError(this, pelmGuestDebug, N_("Invalid value '%s' for GuestDebug/@io attribute"), strTmp.c_str());
     6263
     6264        pelmGuestDebug->getAttributeValue("address", dbg.strAddress);
     6265        pelmGuestDebug->getAttributeValue("port", dbg.ulPort);
    62246266    }
    62256267}
     
    82838325    pElmTracing->setAttribute("allowTracingToAccessVM", dbg.fAllowTracingToAccessVM);
    82848326    pElmTracing->setAttribute("config", dbg.strTracingConfig);
     8327
     8328    xml::ElementNode *pElmGuestDebug = pElmDebugging->createChild("GuestDebug");
     8329    const char *pcszDebugProvider = NULL;
     8330    const char *pcszIoProvider = NULL;
     8331
     8332    switch (dbg.enmDbgProvider)
     8333    {
     8334        case GuestDebugProvider_None:    pcszDebugProvider = "None"; break;
     8335        case GuestDebugProvider_GDB:     pcszDebugProvider = "GDB";  break;
     8336        case GuestDebugProvider_KD:      pcszDebugProvider = "KD";   break;
     8337        default:         AssertFailed(); pcszDebugProvider = "None"; break;
     8338    }
     8339
     8340    switch (dbg.enmIoProvider)
     8341    {
     8342        case GuestDebugIoProvider_None:  pcszIoProvider = "None"; break;
     8343        case GuestDebugIoProvider_TCP:   pcszIoProvider = "TCP";  break;
     8344        case GuestDebugIoProvider_UDP:   pcszIoProvider = "UDP";  break;
     8345        case GuestDebugIoProvider_IPC:   pcszIoProvider = "IPC";  break;
     8346        default:         AssertFailed(); pcszIoProvider = "None"; break;
     8347    }
     8348
     8349    pElmGuestDebug->setAttribute("provider", pcszDebugProvider);
     8350    pElmGuestDebug->setAttribute("io",       pcszIoProvider);
     8351    pElmGuestDebug->setAttribute("address",  dbg.strAddress);
     8352    pElmGuestDebug->setAttribute("port",     dbg.ulPort);
    82858353}
    82868354
     
    89629030#endif /* VBOX_WITH_VMNET */
    89639031        }
     9032
     9033        // VirtualBox 7.0 adds guest debug settings.
     9034        if (   debugging.enmDbgProvider != GuestDebugProvider_None
     9035            || debugging.enmIoProvider != GuestDebugIoProvider_None
     9036            || debugging.strAddress.isNotEmpty()
     9037            || debugging.ulPort != 0)
     9038        {
     9039            m->sv = SettingsVersion_v1_19;
     9040            return;
     9041        }
    89649042    }
    89659043
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette