VirtualBox

Changeset 32006 in vbox for trunk


Ignore:
Timestamp:
Aug 26, 2010 4:14:33 PM (14 years ago)
Author:
vboxsync
Message:

VMM/DBGFCoreWrite: skeleton.

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dbgf.h

    r31987 r32006  
    13661366VMMR3DECL(int)      DBGFR3OSQueryNameAndVersion(PVM pVM, char *pszName, size_t cchName, char *pszVersion, size_t cchVersion);
    13671367VMMR3DECL(void *)   DBGFR3OSQueryInterface(PVM pVM, DBGFOSINTERFACE enmIf);
     1368VMMR3DECL(int)      DBGFR3CoreWrite(PVM pVM, VMCPUID idCpu, const char *pszDumpPath);
    13681369
    13691370/** @} */
  • trunk/src/VBox/Debugger/DBGCCommands.cpp

    r31966 r32006  
    7676static DECLCALLBACK(int) dbgcCmdEcho(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult);
    7777static DECLCALLBACK(int) dbgcCmdRunScript(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult);
     78static DECLCALLBACK(int) dbgcCmdWriteCore(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult);
    7879
    7980
     
    214215
    215216
     217/** writecore arguments. */
     218static const DBGCVARDESC    g_aArgWriteCore[] =
     219{
     220    /* cTimesMin,   cTimesMax,  enmCategory,            fFlags,                         pszName,        pszDescription */
     221    {  1,           1,          DBGCVAR_CAT_STRING,     0,                              "path",         "Filename string." },
     222};
    216223
    217224
     
    221228{
    222229    /* pszCmd,      cArgsMin, cArgsMax, paArgDescs,         cArgDescs,                  pResultDesc,fFlags,pfnHandler        pszSyntax,          ....pszDescription */
    223     { "bye",        0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
    224     { "cpu",        0,        1,        &g_aArgCpu[0],      RT_ELEMENTS(g_aArgCpu),     NULL,       0,     dbgcCmdCpu,       "[idCpu]",              "If no argument, display the current CPU, else change to the specified CPU." },
    225     { "echo",       1,        ~0,       &g_aArgMultiStr[0], RT_ELEMENTS(g_aArgMultiStr),NULL,       0,     dbgcCmdEcho,      "<str1> [str2..[strN]]", "Displays the strings separated by one blank space and the last one followed by a newline." },
    226     { "exit",       0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
    227     { "format",     1,        1,        &g_aArgAny[0],      RT_ELEMENTS(g_aArgAny),     NULL,       0,     dbgcCmdFormat,    "",                     "Evaluates an expression and formats it." },
    228     { "detect",     0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdDetect,    "",                     "Detects or re-detects the guest os and starts the OS specific digger." },
    229     { "harakiri",   0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdHarakiri,  "",                     "Kills debugger process." },
    230     { "help",       0,        ~0,       &g_aArgHelp[0],     RT_ELEMENTS(g_aArgHelp),    NULL,       0,     dbgcCmdHelp,      "[cmd/op [..]]",        "Display help. For help about info items try 'info help'." },
    231     { "info",       1,        2,        &g_aArgInfo[0],     RT_ELEMENTS(g_aArgInfo),    NULL,       0,     dbgcCmdInfo,      "<info> [args]",        "Display info register in the DBGF. For a list of info items try 'info help'." },
    232     { "loadimage",  2,        3,        &g_aArgLoadImage[0],RT_ELEMENTS(g_aArgLoadImage),NULL,      0,     dbgcCmdLoadImage, "<filename> <address> [name]",
     230    { "bye",        0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
     231    { "cpu",        0,        1,        &g_aArgCpu[0],       RT_ELEMENTS(g_aArgCpu),     NULL,       0,     dbgcCmdCpu,       "[idCpu]",              "If no argument, display the current CPU, else change to the specified CPU." },
     232    { "echo",       1,        ~0,       &g_aArgMultiStr[0],  RT_ELEMENTS(g_aArgMultiStr),NULL,       0,     dbgcCmdEcho,      "<str1> [str2..[strN]]", "Displays the strings separated by one blank space and the last one followed by a newline." },
     233    { "exit",       0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
     234    { "format",     1,        1,        &g_aArgAny[0],       RT_ELEMENTS(g_aArgAny),     NULL,       0,     dbgcCmdFormat,    "",                     "Evaluates an expression and formats it." },
     235    { "detect",     0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdDetect,    "",                     "Detects or re-detects the guest os and starts the OS specific digger." },
     236    { "harakiri",   0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdHarakiri,  "",                     "Kills debugger process." },
     237    { "help",       0,        ~0,       &g_aArgHelp[0],      RT_ELEMENTS(g_aArgHelp),    NULL,       0,     dbgcCmdHelp,      "[cmd/op [..]]",        "Display help. For help about info items try 'info help'." },
     238    { "info",       1,        2,        &g_aArgInfo[0],      RT_ELEMENTS(g_aArgInfo),    NULL,       0,     dbgcCmdInfo,      "<info> [args]",        "Display info register in the DBGF. For a list of info items try 'info help'." },
     239    { "loadimage",  2,        3,        &g_aArgLoadImage[0], RT_ELEMENTS(g_aArgLoadImage),NULL,      0,     dbgcCmdLoadImage, "<filename> <address> [name]",
    233240                                                                                                                                                     "Loads the symbols of an executable image at the specified address. "
    234241                                                                                                                                                     /*"Optionally giving the module a name other than the file name stem."*/ }, /** @todo implement line breaks */
    235     { "loadmap",    2,        5,        &g_aArgLoadMap[0],  RT_ELEMENTS(g_aArgLoadMap), NULL,       0,     dbgcCmdLoadMap,   "<filename> <address> [name] [subtrahend] [seg]",
     242    { "loadmap",    2,        5,        &g_aArgLoadMap[0],   RT_ELEMENTS(g_aArgLoadMap), NULL,       0,     dbgcCmdLoadMap,   "<filename> <address> [name] [subtrahend] [seg]",
    236243                                                                                                                                                     "Loads the symbols from a map file, usually at a specified address. "
    237244                                                                                                                                                     /*"Optionally giving the module a name other than the file name stem "
    238245                                                                                                                                                     "and a subtrahend to subtract from the addresses."*/ },
    239     { "loadplugin", 1,        1,        &g_aArgPlugIn[0],   RT_ELEMENTS(g_aArgPlugIn),  NULL,       0,     dbgcCmdLoadPlugIn,"<plugin1> [plugin2..N]", "Loads one or more plugins" },
    240     { "loadseg",    3,        4,        &g_aArgLoadSeg[0],  RT_ELEMENTS(g_aArgLoadSeg), NULL,       0,     dbgcCmdLoadSeg,   "<filename> <address> <seg> [name]",
     246    { "loadplugin", 1,        1,        &g_aArgPlugIn[0],    RT_ELEMENTS(g_aArgPlugIn),  NULL,       0,     dbgcCmdLoadPlugIn,"<plugin1> [plugin2..N]", "Loads one or more plugins" },
     247    { "loadseg",    3,        4,        &g_aArgLoadSeg[0],   RT_ELEMENTS(g_aArgLoadSeg), NULL,       0,     dbgcCmdLoadSeg,   "<filename> <address> <seg> [name]",
    241248                                                                                                                                                     "Loads the symbols of a segment in the executable image at the specified address. "
    242249                                                                                                                                                     /*"Optionally giving the module a name other than the file name stem."*/ },
    243     { "loadsyms",   1,        5,        &g_aArgLoadSyms[0], RT_ELEMENTS(g_aArgLoadSyms),NULL,       0,     dbgcCmdLoadSyms,  "<filename> [delta] [module] [module address]", "Loads symbols from a text file. Optionally giving a delta and a module." },
    244     { "loadvars",   1,        1,        &g_aArgFilename[0], RT_ELEMENTS(g_aArgFilename),NULL,       0,     dbgcCmdLoadVars,  "<filename>",           "Load variables from file. One per line, same as the args to the set command." },
    245     { "log",        1,        1,        &g_aArgLog[0],      RT_ELEMENTS(g_aArgLog),     NULL,       0,     dbgcCmdLog,       "<group string>",       "Modifies the logging group settings (VBOX_LOG)" },
    246     { "logdest",    1,        1,        &g_aArgLogDest[0],  RT_ELEMENTS(g_aArgLogDest), NULL,       0,     dbgcCmdLogDest,   "<dest string>",        "Modifies the logging destination (VBOX_LOG_DEST)." },
    247     { "logflags",   1,        1,        &g_aArgLogFlags[0], RT_ELEMENTS(g_aArgLogFlags),NULL,       0,     dbgcCmdLogFlags,  "<flags string>",       "Modifies the logging flags (VBOX_LOG_FLAGS)." },
    248     { "quit",       0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
    249     { "runscript",  1,        1,        &g_aArgFilename[0], RT_ELEMENTS(g_aArgFilename),NULL,       0,     dbgcCmdRunScript, "<filename>",           "Runs the command listed in the script. Lines starting with '#' "
    250                                                                                                                                                      "(after removing blanks) are comment. blank lines are ignored. Stops on failure." },
    251     { "set",        2,        2,        &g_aArgSet[0],      RT_ELEMENTS(g_aArgSet),     NULL,       0,     dbgcCmdSet,       "<var> <value>",        "Sets a global variable." },
    252     { "showplugins",0,        0,        NULL,               0,                          NULL,       0,    dbgcCmdShowPlugIns,"",                     "List loaded plugins." },
    253     { "showvars",   0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdShowVars,  "",                     "List all the defined variables." },
    254     { "stop",       0,        0,        NULL,               0,                          NULL,       0,     dbgcCmdStop,      "",                     "Stop execution." },
    255     { "unloadplugin", 1,     ~0,        &g_aArgPlugIn[0],   RT_ELEMENTS(g_aArgPlugIn),  NULL,       0,  dbgcCmdUnloadPlugIn, "<plugin1> [plugin2..N]", "Unloads one or more plugins." },
    256     { "unset",      1,       ~0,        &g_aArgMultiStr[0], RT_ELEMENTS(g_aArgMultiStr),NULL,       0,     dbgcCmdUnset,     "<var1> [var1..[varN]]", "Unsets (delete) one or more global variables." },
     250    { "loadsyms",   1,        5,        &g_aArgLoadSyms[0],  RT_ELEMENTS(g_aArgLoadSyms),NULL,       0,     dbgcCmdLoadSyms,  "<filename> [delta] [module] [module address]", "Loads symbols from a text file. Optionally giving a delta and a module." },
     251    { "loadvars",   1,        1,        &g_aArgFilename[0],  RT_ELEMENTS(g_aArgFilename),NULL,       0,     dbgcCmdLoadVars,  "<filename>",           "Load variables from file. One per line, same as the args to the set command." },
     252    { "log",        1,        1,        &g_aArgLog[0],       RT_ELEMENTS(g_aArgLog),     NULL,       0,     dbgcCmdLog,       "<group string>",       "Modifies the logging group settings (VBOX_LOG)" },
     253    { "logdest",    1,        1,        &g_aArgLogDest[0],    RT_ELEMENTS(g_aArgLogDest), NULL,      0,     dbgcCmdLogDest,   "<dest string>",        "Modifies the logging destination (VBOX_LOG_DEST)." },
     254    { "logflags",   1,        1,        &g_aArgLogFlags[0],  RT_ELEMENTS(g_aArgLogFlags),NULL,       0,     dbgcCmdLogFlags,  "<flags string>",       "Modifies the logging flags (VBOX_LOG_FLAGS)." },
     255    { "quit",       0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdQuit,      "",                     "Exits the debugger." },
     256    { "runscript",  1,        1,        &g_aArgFilename[0],  RT_ELEMENTS(g_aArgFilename),NULL,       0,     dbgcCmdRunScript, "<filename>",           "Runs the command listed in the script. Lines starting with '#' "
     257                                                                                                                                                      "(after removing blanks) are comment. blank lines are ignored. Stops on failure." },
     258    { "set",        2,        2,        &g_aArgSet[0],       RT_ELEMENTS(g_aArgSet),     NULL,       0,     dbgcCmdSet,       "<var> <value>",        "Sets a global variable." },
     259    { "showplugins",0,        0,        NULL,                0,                          NULL,       0,    dbgcCmdShowPlugIns,"",                     "List loaded plugins." },
     260    { "showvars",   0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdShowVars,  "",                     "List all the defined variables." },
     261    { "stop",       0,        0,        NULL,                0,                          NULL,       0,     dbgcCmdStop,      "",                     "Stop execution." },
     262    { "unloadplugin", 1,     ~0,        &g_aArgPlugIn[0],    RT_ELEMENTS(g_aArgPlugIn),  NULL,       0,  dbgcCmdUnloadPlugIn, "<plugin1> [plugin2..N]", "Unloads one or more plugins." },
     263    { "unset",      1,       ~0,        &g_aArgMultiStr[0],  RT_ELEMENTS(g_aArgMultiStr),NULL,       0,     dbgcCmdUnset,     "<var1> [var1..[varN]]",  "Unsets (delete) one or more global variables." },
     264    { "writecore",  1,        1,        &g_aArgWriteCore[0], RT_ELEMENTS(g_aArgWriteCore), NULL,     0,   dbgcCmdWriteCore,   "<filename>",           "Write core to file." },
    257265};
    258266
     
    20752083}
    20762084
     2085
     2086/**
     2087 * The 'writecore' command.
     2088 *
     2089 * @returns VBox status.
     2090 * @param   pCmd        Pointer to the command descriptor (as registered).
     2091 * @param   pCmdHlp     Pointer to command helper functions.
     2092 * @param   pVM         Pointer to the current VM (if any).
     2093 * @param   paArgs      Pointer to (readonly) array of arguments.
     2094 * @param   cArgs       Number of arguments in the array.
     2095 */
     2096static DECLCALLBACK(int) dbgcCmdWriteCore(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult)
     2097{
     2098    Log(("dbgcCmdWriteCore\n"));
     2099
     2100    /*
     2101     * Validate input, lots of paranoia here.
     2102     */
     2103    if (    cArgs != 1
     2104        ||  paArgs[0].enmType != DBGCVAR_TYPE_STRING)
     2105    {
     2106        AssertMsgFailed(("Expected one string exactly!\n"));
     2107        return VERR_PARSE_INCORRECT_ARG_TYPE;
     2108    }
     2109
     2110    const char *pszDumpPath = paArgs[0].u.pszString;
     2111    if (!pszDumpPath)
     2112        return DBGCCmdHlpFail(pCmdHlp, pCmd, "Missing file path.\n");
     2113
     2114    int rc = DBGFR3CoreWrite(pVM, 0, pszDumpPath);
     2115    if (RT_FAILURE(rc))
     2116        return DBGCCmdHlpFail(pCmdHlp, pCmd, "DBGFR3WriteCore failed. rc=%Rrc\n", rc);
     2117
     2118    return VINF_SUCCESS;
     2119}
     2120
  • trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp

    r31966 r32006  
    237237}
    238238
     239VMMR3DECL(int) DBGFR3CoreWrite(PVM pVM, VMCPUID idCpu, const char *pszDumpPath)
     240{
     241    return VERR_INTERNAL_ERROR;
     242}
     243
    239244
    240245//////////////////////////////////////////////////////////////////////////
  • trunk/src/VBox/VMM/Makefile.kmk

    r31789 r32006  
    7676        DBGFAddrSpace.cpp \
    7777        DBGFBp.cpp \
     78        DBGFCoreWrite.cpp \
    7879        DBGFCpu.cpp \
    7980        DBGFDisas.cpp \
  • trunk/src/VBox/VMM/VBoxVMMDeps.cpp

    r31727 r32006  
    4343    (PFNRT)DBGFR3AsSymbolByAddr,
    4444    (PFNRT)DBGFR3CpuGetMode,
     45    (PFNRT)DBGFR3CoreWrite,
    4546    (PFNRT)DBGFR3MemScan,
    4647    (PFNRT)DBGFR3RegQueryU8,
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