VirtualBox

Changeset 35550 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Jan 13, 2011 6:08:54 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
69434
Message:

Implemented DBGFR3RegNmQueryAll and MachineDebugger::GetRegisters.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp

    r35513 r35550  
    12321232             * Real work.
    12331233             */
    1234             /** @todo query all registers. */
    1235             DBGFREGENTRY aRegs[DBGFREG_ALL_COUNT];
    1236             int vrc = DBGFR3RegCpuQueryAll(ptrVM.raw(), a_idCpu, aRegs, RT_ELEMENTS(aRegs));
     1234            size_t cRegs;
     1235            int vrc = DBGFR3RegNmQueryAllCount(ptrVM.raw(), &cRegs);
    12371236            if (RT_SUCCESS(vrc))
    12381237            {
    1239                 try
     1238                PDBGFREGENTRYNM paRegs = (PDBGFREGENTRYNM)RTMemAllocZ(sizeof(paRegs[0]) * cRegs);
     1239                if (paRegs)
    12401240                {
    1241                     com::SafeArray<BSTR> abstrNames(RT_ELEMENTS(aRegs));
    1242                     com::SafeArray<BSTR> abstrValues(RT_ELEMENTS(aRegs));
    1243 
    1244                     for (uint32_t iReg = 0; iReg < RT_ELEMENTS(aRegs); iReg++)
     1241                    vrc = DBGFR3RegNmQueryAll(ptrVM.raw(), paRegs, cRegs);
     1242                    if (RT_SUCCESS(vrc))
    12451243                    {
    1246                         char szHex[128];
    1247                         Bstr bstrValue;
    1248 
    1249                         hrc = formatRegisterValue(&bstrValue, &aRegs[iReg].Val, aRegs[iReg].enmType);
    1250                         AssertComRC(hrc);
    1251                         bstrValue.detachTo(&abstrValues[iReg]);
    1252 
    1253                         Bstr bstrName(DBGFR3RegCpuName(ptrVM.raw(), aRegs[iReg].enmReg, DBGFREGVALTYPE_INVALID));
    1254                         bstrName.detachTo(&abstrNames[iReg]);
     1244                        try
     1245                        {
     1246                            com::SafeArray<BSTR> abstrNames(cRegs);
     1247                            com::SafeArray<BSTR> abstrValues(cRegs);
     1248
     1249                            for (uint32_t iReg = 0; iReg < cRegs; iReg++)
     1250                            {
     1251                                char szHex[128];
     1252                                Bstr bstrValue;
     1253
     1254                                hrc = formatRegisterValue(&bstrValue, &paRegs[iReg].Val, paRegs[iReg].enmType);
     1255                                AssertComRC(hrc);
     1256                                bstrValue.detachTo(&abstrValues[iReg]);
     1257
     1258                                Bstr bstrName(paRegs[iReg].pszName);
     1259                                bstrName.detachTo(&abstrNames[iReg]);
     1260                            }
     1261
     1262                            abstrNames.detachTo(ComSafeArrayOutArg(a_bstrNames));
     1263                            abstrValues.detachTo(ComSafeArrayOutArg(a_bstrValues));
     1264                        }
     1265                        catch (std::bad_alloc)
     1266                        {
     1267                            hrc = E_OUTOFMEMORY;
     1268                        }
    12551269                    }
    1256 
    1257                     abstrValues.detachTo(ComSafeArrayOutArg(a_bstrNames));
    1258                     abstrValues.detachTo(ComSafeArrayOutArg(a_bstrValues));
     1270                    else
     1271                        hrc = setError(E_FAIL, tr("DBGFR3RegNmQueryAll failed with %Rrc"), vrc);
     1272
     1273                    RTMemFree(paRegs);
    12591274                }
    1260                 catch (std::bad_alloc)
    1261                 {
     1275                else
    12621276                    hrc = E_OUTOFMEMORY;
    1263                 }
    12641277            }
    12651278            else
    1266                 hrc = setError(E_FAIL, tr("DBGFR3RegQueryAll failed with %Rrc"), vrc);
     1279                hrc = setError(E_FAIL, tr("DBGFR3RegNmQueryAllCount failed with %Rrc"), vrc);
    12671280        }
    12681281    }
Note: See TracChangeset for help on using the changeset viewer.

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