VirtualBox

Changeset 106073 in vbox for trunk/src/VBox/Debugger


Ignore:
Timestamp:
Sep 17, 2024 2:47:42 PM (7 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164839
Message:

VBoxDumpImage: Better help

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/DBGCDumpImage.cpp

    r106061 r106073  
    109109#define DUMPIMAGE_SELECT_DEFAULT     DUMPIMAGE_SELECT_EVERYTHING
    110110
     111static struct
     112{
     113    const char *psz;
     114    size_t      cch;
     115    uint64_t    fSel;
     116    const char *pszSummary;
     117    const char *pszDesc;
     118} const g_aMnemonics[] =
     119{
     120    { RT_STR_TUPLE("h"),            DUMPIMAGE_SELECT_HEADERS,     "h[d[r]],header[s]",      "File headers" },
     121    { RT_STR_TUPLE("hd"),           DUMPIMAGE_SELECT_HEADERS,     NULL,                     NULL  },
     122    { RT_STR_TUPLE("hdr"),          DUMPIMAGE_SELECT_HEADERS,     NULL,                     NULL  },
     123    { RT_STR_TUPLE("header"),       DUMPIMAGE_SELECT_HEADERS,     NULL,                     NULL  },
     124    { RT_STR_TUPLE("headers"),      DUMPIMAGE_SELECT_HEADERS,     NULL,                     NULL  },
     125    { RT_STR_TUPLE("s"),            DUMPIMAGE_SELECT_SECTIONS,    "s[e[ction[s]]]",         "Section headers"},
     126    { RT_STR_TUPLE("se"),           DUMPIMAGE_SELECT_SECTIONS,    NULL,                     NULL  },
     127    { RT_STR_TUPLE("sec"),          DUMPIMAGE_SELECT_SECTIONS,    NULL,                     NULL  },
     128    { RT_STR_TUPLE("section"),      DUMPIMAGE_SELECT_SECTIONS,    NULL,                     NULL  },
     129    { RT_STR_TUPLE("sections"),     DUMPIMAGE_SELECT_SECTIONS,    NULL,                     NULL  },
     130    { RT_STR_TUPLE("d"),            DUMPIMAGE_SELECT_DEBUG,       "d[b[g[info]]],db,debug", "Debug info headers" },
     131    { RT_STR_TUPLE("db"),           DUMPIMAGE_SELECT_DEBUG,       NULL,                     NULL  },
     132    { RT_STR_TUPLE("dg"),           DUMPIMAGE_SELECT_DEBUG,       NULL,                     NULL  },
     133    { RT_STR_TUPLE("dbg"),          DUMPIMAGE_SELECT_DEBUG,       NULL,                     NULL  },
     134    { RT_STR_TUPLE("dbginfo"),      DUMPIMAGE_SELECT_DEBUG,       NULL,                     NULL  },
     135    { RT_STR_TUPLE("debug"),        DUMPIMAGE_SELECT_DEBUG,       NULL,                     NULL  },
     136    { RT_STR_TUPLE("f"),            DUMPIMAGE_SELECT_FIXUP,       "f[x],fix[up[s]]",        "Fixups" },
     137    { RT_STR_TUPLE("fx"),           DUMPIMAGE_SELECT_FIXUP,       NULL,                     NULL  },
     138    { RT_STR_TUPLE("fix"),          DUMPIMAGE_SELECT_FIXUP,       NULL,                     NULL  },
     139    { RT_STR_TUPLE("fixup"),        DUMPIMAGE_SELECT_FIXUP,       NULL,                     NULL  },
     140    { RT_STR_TUPLE("fixups"),       DUMPIMAGE_SELECT_FIXUP,       NULL,                     NULL  },
     141    { RT_STR_TUPLE("e"),            DUMPIMAGE_SELECT_EXPORTS,     "e[x[p[ort[s]]]]",        "Exports" },
     142    { RT_STR_TUPLE("ex"),           DUMPIMAGE_SELECT_EXPORTS,     NULL,                     NULL  },
     143    { RT_STR_TUPLE("exp"),          DUMPIMAGE_SELECT_EXPORTS,     NULL,                     NULL  },
     144    { RT_STR_TUPLE("export"),       DUMPIMAGE_SELECT_EXPORTS,     NULL,                     NULL  },
     145    { RT_STR_TUPLE("exports"),      DUMPIMAGE_SELECT_EXPORTS,     NULL,                     NULL  },
     146    { RT_STR_TUPLE("i"),            DUMPIMAGE_SELECT_IMPORTS,     "i[m[p[ort[s]]]]",        "Imports" },
     147    { RT_STR_TUPLE("im"),           DUMPIMAGE_SELECT_IMPORTS,     NULL,                     NULL  },
     148    { RT_STR_TUPLE("imp"),          DUMPIMAGE_SELECT_IMPORTS,     NULL,                     NULL  },
     149    { RT_STR_TUPLE("import"),       DUMPIMAGE_SELECT_IMPORTS,     NULL,                     NULL  },
     150    { RT_STR_TUPLE("imports"),      DUMPIMAGE_SELECT_IMPORTS,     NULL,                     NULL  },
     151    { RT_STR_TUPLE("l"),            DUMPIMAGE_SELECT_LOAD_CONFIG, "l[c[fg],loadcfg",        "Load configuration" },
     152    { RT_STR_TUPLE("lc"),           DUMPIMAGE_SELECT_LOAD_CONFIG, NULL,                     NULL  },
     153    { RT_STR_TUPLE("lcfg"),         DUMPIMAGE_SELECT_LOAD_CONFIG, NULL,                     NULL  },
     154    { RT_STR_TUPLE("loadcfg"),      DUMPIMAGE_SELECT_LOAD_CONFIG, NULL,                     NULL  },
     155    { RT_STR_TUPLE("rc"),           DUMPIMAGE_SELECT_RESOURCES,   "rc[s[rc]],resource[s]",  "Resources" },
     156    { RT_STR_TUPLE("rcs"),          DUMPIMAGE_SELECT_RESOURCES,   NULL,                     NULL  },
     157    { RT_STR_TUPLE("rcsrc"),        DUMPIMAGE_SELECT_RESOURCES,   NULL,                     NULL  },
     158    { RT_STR_TUPLE("resource"),     DUMPIMAGE_SELECT_RESOURCES,   NULL,                     NULL  },
     159    { RT_STR_TUPLE("resources"),    DUMPIMAGE_SELECT_RESOURCES,   NULL,                     NULL  },
     160    { RT_STR_TUPLE("t"),            DUMPIMAGE_SELECT_TLS,         "t[ls]",                  "Thread local storage" },
     161    { RT_STR_TUPLE("tls"),          DUMPIMAGE_SELECT_TLS,         NULL,                     NULL  },
     162    /* masks: */
     163    { RT_STR_TUPLE("all"),          DUMPIMAGE_SELECT_EVERYTHING,  "all,everything",         "Everything" },
     164    { RT_STR_TUPLE("everything"),   DUMPIMAGE_SELECT_EVERYTHING,  NULL,                     NULL  },
     165    { RT_STR_TUPLE("def"),          DUMPIMAGE_SELECT_DEFAULT,     "def[ault]",              "Default selection" },
     166    { RT_STR_TUPLE("default"),      DUMPIMAGE_SELECT_DEFAULT,     NULL,                     NULL },
     167};
     168
    111169class DumpImageCmd
    112170{
     
    302360    int parseSelection(const char *pszSelection, uint64_t *pfSel)
    303361    {
    304         static const struct { const char *psz; size_t cch; uint64_t fSel; } s_aMnemonics[] =
    305         {
    306             { RT_STR_TUPLE("h"),            DUMPIMAGE_SELECT_HEADERS     },
    307             { RT_STR_TUPLE("hd"),           DUMPIMAGE_SELECT_HEADERS     },
    308             { RT_STR_TUPLE("hdr"),          DUMPIMAGE_SELECT_HEADERS     },
    309             { RT_STR_TUPLE("header"),       DUMPIMAGE_SELECT_HEADERS     },
    310             { RT_STR_TUPLE("headers"),      DUMPIMAGE_SELECT_HEADERS     },
    311             { RT_STR_TUPLE("s"),            DUMPIMAGE_SELECT_SECTIONS    },
    312             { RT_STR_TUPLE("se"),           DUMPIMAGE_SELECT_SECTIONS    },
    313             { RT_STR_TUPLE("sec"),          DUMPIMAGE_SELECT_SECTIONS    },
    314             { RT_STR_TUPLE("section"),      DUMPIMAGE_SELECT_SECTIONS    },
    315             { RT_STR_TUPLE("sections"),     DUMPIMAGE_SELECT_SECTIONS    },
    316             { RT_STR_TUPLE("d"),            DUMPIMAGE_SELECT_DEBUG       },
    317             { RT_STR_TUPLE("db"),           DUMPIMAGE_SELECT_DEBUG       },
    318             { RT_STR_TUPLE("dg"),           DUMPIMAGE_SELECT_DEBUG       },
    319             { RT_STR_TUPLE("dbg"),          DUMPIMAGE_SELECT_DEBUG       },
    320             { RT_STR_TUPLE("dbginfo"),      DUMPIMAGE_SELECT_DEBUG       },
    321             { RT_STR_TUPLE("debug"),        DUMPIMAGE_SELECT_DEBUG       },
    322             { RT_STR_TUPLE("f"),            DUMPIMAGE_SELECT_FIXUP       },
    323             { RT_STR_TUPLE("fx"),           DUMPIMAGE_SELECT_FIXUP       },
    324             { RT_STR_TUPLE("fix"),          DUMPIMAGE_SELECT_FIXUP       },
    325             { RT_STR_TUPLE("fixup"),        DUMPIMAGE_SELECT_FIXUP       },
    326             { RT_STR_TUPLE("fixups"),       DUMPIMAGE_SELECT_FIXUP       },
    327             { RT_STR_TUPLE("e"),            DUMPIMAGE_SELECT_EXPORTS     },
    328             { RT_STR_TUPLE("ex"),           DUMPIMAGE_SELECT_EXPORTS     },
    329             { RT_STR_TUPLE("exp"),          DUMPIMAGE_SELECT_EXPORTS     },
    330             { RT_STR_TUPLE("export"),       DUMPIMAGE_SELECT_EXPORTS     },
    331             { RT_STR_TUPLE("exports"),      DUMPIMAGE_SELECT_EXPORTS     },
    332             { RT_STR_TUPLE("i"),            DUMPIMAGE_SELECT_IMPORTS     },
    333             { RT_STR_TUPLE("im"),           DUMPIMAGE_SELECT_IMPORTS     },
    334             { RT_STR_TUPLE("imp"),          DUMPIMAGE_SELECT_IMPORTS     },
    335             { RT_STR_TUPLE("import"),       DUMPIMAGE_SELECT_IMPORTS     },
    336             { RT_STR_TUPLE("imports"),      DUMPIMAGE_SELECT_IMPORTS     },
    337             { RT_STR_TUPLE("l"),            DUMPIMAGE_SELECT_LOAD_CONFIG },
    338             { RT_STR_TUPLE("lc"),           DUMPIMAGE_SELECT_LOAD_CONFIG },
    339             { RT_STR_TUPLE("lcfg"),         DUMPIMAGE_SELECT_LOAD_CONFIG },
    340             { RT_STR_TUPLE("loadcfg"),      DUMPIMAGE_SELECT_LOAD_CONFIG },
    341             { RT_STR_TUPLE("rc"),           DUMPIMAGE_SELECT_RESOURCES   },
    342             { RT_STR_TUPLE("rcs"),          DUMPIMAGE_SELECT_RESOURCES   },
    343             { RT_STR_TUPLE("rcsrc"),        DUMPIMAGE_SELECT_RESOURCES   },
    344             { RT_STR_TUPLE("resource"),     DUMPIMAGE_SELECT_RESOURCES   },
    345             { RT_STR_TUPLE("resources"),    DUMPIMAGE_SELECT_RESOURCES   },
    346             { RT_STR_TUPLE("t"),            DUMPIMAGE_SELECT_TLS         },
    347             { RT_STR_TUPLE("tls"),          DUMPIMAGE_SELECT_TLS         },
    348             /* masks: */
    349             { RT_STR_TUPLE("all"),          DUMPIMAGE_SELECT_EVERYTHING  },
    350             { RT_STR_TUPLE("everything"),   DUMPIMAGE_SELECT_EVERYTHING  },
    351             { RT_STR_TUPLE("def"),          DUMPIMAGE_SELECT_DEFAULT     },
    352             { RT_STR_TUPLE("default"),      DUMPIMAGE_SELECT_DEFAULT     },
    353         };
    354 
    355362        *pfSel = 0;
    356363        char ch;
     
    375382            /* Look it up. */
    376383            uint32_t i;
    377             for (i = 0; i < RT_ELEMENTS(s_aMnemonics); i++)
    378                 if (cch == s_aMnemonics[i].cch && memcmp(s_aMnemonics[i].psz, pszSelection, cch) == 0)
     384            for (i = 0; i < RT_ELEMENTS(g_aMnemonics); i++)
     385                if (cch == g_aMnemonics[i].cch && memcmp(g_aMnemonics[i].psz, pszSelection, cch) == 0)
    379386                {
    380                     *pfSel = s_aMnemonics[i].fSel;
     387                    *pfSel = g_aMnemonics[i].fSel;
    381388                    break;
    382389                }
    383             if (i >= RT_ELEMENTS(s_aMnemonics))
     390            if (i >= RT_ELEMENTS(g_aMnemonics))
    384391            {
    385392                mySyntax("Unknown selection '%.*s'", cch, pszSelection);
     
    20992106
    21002107            case 'h':
    2101                 RTPrintf("usage: %s [options] <file> [file2..]\n", RTProcShortName());
     2108            {
     2109                RTPrintf("usage: %s [options] <file> [file2..]\n"
     2110                         "\n"
     2111                         "Options:\n"
     2112                         "  -b<address>, --image-base=<address>\n"
     2113                         "    Pretend load address for the image.\n"
     2114                         "  -i/--include <sel>, -o/-O/--only <sel>, -s/-S/--skip <sel>\n"
     2115                         "    Select what to display.  The selection is a comma or space separated\n"
     2116                         "    list of any of the following:\n"
     2117                         , RTProcShortName());
     2118                size_t cchWidth = 1;
     2119                for (unsigned i = 0; i < RT_ELEMENTS(g_aMnemonics); i++)
     2120                    if (g_aMnemonics[i].pszSummary)
     2121                    {
     2122                        size_t cchSummary = strlen(g_aMnemonics[i].pszSummary);
     2123                        cchWidth = RT_MAX(cchWidth, cchSummary);
     2124                    }
     2125                for (unsigned i = 0; i < RT_ELEMENTS(g_aMnemonics); i++)
     2126                    if (g_aMnemonics[i].pszSummary)
     2127                        RTPrintf("      %-*s - %s\n", cchWidth, g_aMnemonics[i].pszSummary, g_aMnemonics[i].pszDesc);
    21022128                return RTEXITCODE_SUCCESS;
     2129            }
    21032130
    21042131            case VINF_GETOPT_NOT_OPTION:
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