VirtualBox

Changeset 32741 in vbox


Ignore:
Timestamp:
Sep 23, 2010 11:21:52 PM (14 years ago)
Author:
vboxsync
Message:

Made the GUI check if GUI/Dbg/{Enabled,AutoShow} is in {yes,no,true,false,on,off,enabled,disabled,veto} when figuring out if a debugger gui option is true or false.

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/manual/en_US/user_Troubleshooting.xml

    r32387 r32741  
    179179        </itemizedlist></para>
    180180
    181       <para>The debugger can be enabled in two ways:<itemizedlist>
     181      <para>The debugger can be enabled in three ways:<itemizedlist>
    182182          <listitem>
    183183            <para>Start the <computeroutput>VirtualBox</computeroutput>
     
    194194            <computeroutput>VBOX_GUI_DBG_ENABLED</computeroutput> or
    195195            <computeroutput>VBOX_GUI_DBG_AUTO_SHOW</computeroutput>
    196             environment variable to an arbitrary value before launching the
    197             VirtualBox process. Setting these variables (only their presence
    198             is checked) is effective even when the first VirtualBox process is
    199             the VM selector window. VMs subsequently launched from the
    200             selector will have the debugger enabled.</para>
    201           </listitem>
     196            environment variable to <computeroutput>true</computeroutput>
     197            before launching the VirtualBox process. Setting these variables
     198            (only their presence is checked) is effective even when the first
     199            VirtualBox process is the VM selector window. VMs subsequently
     200            launched from the selector will have the debugger enabled.</para>
     201          </listitem>
     202
     203          <listitem>
     204            <para>Set the
     205            <computeroutput>GUI/Dbg/Enabled</computeroutput> extra data item to
     206            <computeroutput>true</computeroutput> before launching the
     207            VM.  This can be set globally or on a per VM basis.</para>
     208          </listitem>
     209
    202210        </itemizedlist></para>
    203211
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxDefs.cpp

    r30868 r32741  
    8080const char* VBoxDefs::GUI_Accelerate2D_PixformatAYUV = "GUI/Accelerate2D/PixformatAYUV";
    8181#endif
     82#ifdef VBOX_WITH_DEBUGGER_GUI
     83const char* VBoxDefs::GUI_DbgEnabled = "GUI/Dbg/Enabled";
     84const char* VBoxDefs::GUI_DbgAutoShow = "GUI/Dbg/AutoShow";
     85#endif
    8286
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxDefs.h

    r30868 r32741  
    159159    static const char* GUI_Accelerate2D_PixformatAYUV;
    160160#endif
     161
     162#ifdef VBOX_WITH_DEBUGGER_GUI
     163    static const char* VBoxDefs::GUI_DbgEnabled;
     164    static const char* VBoxDefs::GUI_DbgAutoShow;
     165#endif
    161166};
    162167
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r32436 r32741  
    44154415    return QObject::eventFilter (aObject, aEvent);
    44164416}
     4417
     4418#ifdef VBOX_WITH_DEBUGGER_GUI
     4419
     4420bool VBoxGlobal::isDebuggerEnabled(CMachine &aMachine)
     4421{
     4422    return isDebuggerWorker(&mDbgEnabled, aMachine, VBoxDefs::GUI_DbgEnabled);
     4423}
     4424
     4425bool VBoxGlobal::isDebuggerAutoShowEnabled(CMachine &aMachine)
     4426{
     4427    return isDebuggerWorker(&mDbgAutoShow, aMachine, VBoxDefs::GUI_DbgAutoShow);
     4428}
     4429
     4430bool VBoxGlobal::isDebuggerAutoShowCommandLineEnabled(CMachine &aMachine)
     4431{
     4432    return isDebuggerWorker(&mDbgAutoShowCommandLine, aMachine, VBoxDefs::GUI_DbgAutoShow);
     4433}
     4434
     4435bool VBoxGlobal::isDebuggerAutoShowStatisticsEnabled(CMachine &aMachine)
     4436{
     4437    return isDebuggerWorker(&mDbgAutoShowStatistics, aMachine, VBoxDefs::GUI_DbgAutoShow);
     4438}
     4439
     4440#endif /* VBOX_WITH_DEBUGGER_GUI */
    44174441
    44184442// Private members
     
    46674691#ifdef VBOX_WITH_DEBUGGER_GUI
    46684692# ifdef VBOX_WITH_DEBUGGER_GUI_MENU
    4669     mDbgEnabled = true;
     4693    initDebuggerVar(&mDbgEnabled, "VBOX_GUI_DBG_ENABLED", VBoxDefs::GUI_DbgEnabled, true);
    46704694# else
    4671     mDbgEnabled = RTEnvExist("VBOX_GUI_DBG_ENABLED");
     4695    initDebuggerVar(&mDbgEnabled, "VBOX_GUI_DBG_ENABLED", VBoxDefs::GUI_DbgEnabled, false);
    46724696# endif
    4673     mDbgAutoShow = mDbgAutoShowCommandLine = mDbgAutoShowStatistics
    4674         = RTEnvExist("VBOX_GUI_DBG_AUTO_SHOW");
     4697    initDebuggerVar(&mDbgAutoShow, "VBOX_GUI_DBG_AUTO_SHOW", VBoxDefs::GUI_DbgAutoShow, false);
     4698    mDbgAutoShowCommandLine = mDbgAutoShowStatistics = mDbgAutoShow;
    46754699    mStartPaused = false;
    46764700#endif
     
    47274751        else if (!::strcmp (arg, "-dbg") || !::strcmp (arg, "--dbg"))
    47284752        {
    4729             mDbgEnabled = true;
     4753            setDebuggerVar(&mDbgEnabled, true);
    47304754        }
    47314755        else if (!::strcmp( arg, "-debug") || !::strcmp (arg, "--debug"))
    47324756        {
    4733             mDbgEnabled = true;
    4734             mDbgAutoShow = mDbgAutoShowCommandLine = mDbgAutoShowStatistics = true;
     4757            setDebuggerVar(&mDbgEnabled, true);
     4758            setDebuggerVar(&mDbgAutoShow, true);
     4759            setDebuggerVar(&mDbgAutoShowCommandLine, true);
     4760            setDebuggerVar(&mDbgAutoShowStatistics, true);
    47354761            mStartPaused = true;
    47364762        }
    47374763        else if (!::strcmp (arg, "--debug-command-line"))
    47384764        {
    4739             mDbgEnabled = true;
    4740             mDbgAutoShow = mDbgAutoShowCommandLine = true;
     4765            setDebuggerVar(&mDbgEnabled, true);
     4766            setDebuggerVar(&mDbgAutoShow, true);
     4767            setDebuggerVar(&mDbgAutoShowCommandLine, true);
    47414768            mStartPaused = true;
    47424769        }
    47434770        else if (!::strcmp (arg, "--debug-statistics"))
    47444771        {
    4745             mDbgEnabled = true;
    4746             mDbgAutoShow = mDbgAutoShowStatistics = true;
     4772            setDebuggerVar(&mDbgEnabled, true);
     4773            setDebuggerVar(&mDbgAutoShow, true);
     4774            setDebuggerVar(&mDbgAutoShowStatistics, true);
    47474775            mStartPaused = true;
    47484776        }
    47494777        else if (!::strcmp (arg, "-no-debug") || !::strcmp (arg, "--no-debug"))
    47504778        {
    4751             mDbgEnabled = false;
    4752             mDbgAutoShow = false;
    4753             mDbgAutoShowCommandLine = false;
    4754             mDbgAutoShowStatistics = false;
     4779            setDebuggerVar(&mDbgEnabled, false);
     4780            setDebuggerVar(&mDbgAutoShow, false);
     4781            setDebuggerVar(&mDbgAutoShowCommandLine, false);
     4782            setDebuggerVar(&mDbgAutoShowStatistics, false);
    47554783        }
    47564784        /* Not quite debug options, but they're only useful with the debugger bits. */
     
    48174845    mValid = true;
    48184846}
     4847
    48194848
    48204849/** @internal
     
    48954924    mValid = false;
    48964925}
     4926
     4927#ifdef VBOX_WITH_DEBUGGER_GUI
     4928
     4929# define VBOXGLOBAL_DBG_CFG_VAR_FALSE       (0)
     4930# define VBOXGLOBAL_DBG_CFG_VAR_TRUE        (1)
     4931# define VBOXGLOBAL_DBG_CFG_VAR_MASK        (1)
     4932# define VBOXGLOBAL_DBG_CFG_VAR_CMD_LINE    RT_BIT(3)
     4933# define VBOXGLOBAL_DBG_CFG_VAR_DONE        RT_BIT(4)
     4934
     4935/**
     4936 * Initialize a debugger config variable.
     4937 *
     4938 * @param   piDbgCfgVar         The debugger config variable to init.
     4939 * @param   pszEnvVar           The environment variable name relating to this
     4940 *                              variable.
     4941 * @param   pszExtraDataName    The extra data name relating to this variable.
     4942 * @param   fDefault            The default value.
     4943 */
     4944void VBoxGlobal::initDebuggerVar(int *piDbgCfgVar, const char *pszEnvVar, const char *pszExtraDataName, bool fDefault)
     4945{
     4946    QString strEnvValue;
     4947    char    szEnvValue[256];
     4948    int rc = RTEnvGetEx(RTENV_DEFAULT, pszEnvVar, szEnvValue, sizeof(szEnvValue), NULL);
     4949    if (RT_SUCCESS(rc))
     4950    {
     4951        strEnvValue = QString::fromUtf8(&szEnvValue[0]).toLower().trimmed();
     4952        if (strEnvValue.isEmpty())
     4953            strEnvValue = "yes";
     4954    }
     4955    else if (rc != VERR_ENV_VAR_NOT_FOUND)
     4956        strEnvValue = "veto";
     4957
     4958    QString     strExtraValue = mVBox.GetExtraData(pszExtraDataName).toLower().trimmed();
     4959    if (strExtraValue.isEmpty())
     4960        strExtraValue = QString();
     4961
     4962    if ( strEnvValue.contains("veto") || strExtraValue.contains("veto"))
     4963        *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_DONE | VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     4964    else if (strEnvValue.isNull() && strExtraValue.isNull())
     4965        *piDbgCfgVar = fDefault ? VBOXGLOBAL_DBG_CFG_VAR_TRUE : VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     4966    else
     4967    {
     4968        QString *pStr = !strEnvValue.isEmpty() ? &strEnvValue : &strExtraValue;
     4969        if (   pStr->startsWith("y")  // yes
     4970            || pStr->startsWith("e")  // enabled
     4971            || pStr->startsWith("t")  // true
     4972            || pStr->startsWith("on")
     4973            || pStr->toLongLong() != 0)
     4974            *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_TRUE;
     4975        else if (   pStr->startsWith("n")  // o
     4976                 || pStr->startsWith("d")  // disable
     4977                 || pStr->startsWith("f")  // false
     4978                 || pStr->startsWith("off")
     4979                 || pStr->contains("veto")
     4980                 || pStr->toLongLong() == 0)
     4981            *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     4982        else
     4983        {
     4984            LogFunc(("Ignoring unknown value '%s' for '%s'\n", pStr->toAscii().constData(), pStr == &strEnvValue ? pszEnvVar : pszExtraDataName));
     4985            *piDbgCfgVar = fDefault ? VBOXGLOBAL_DBG_CFG_VAR_TRUE : VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     4986        }
     4987    }
     4988}
     4989
     4990/**
     4991 * Set a debugger config variable according according to start up argument.
     4992 * 
     4993 * @param   piDbgCfgVar         The debugger config variable to set.
     4994 * @param   fState              The value from the command line.
     4995 */
     4996void VBoxGlobal::setDebuggerVar(int *piDbgCfgVar, bool fState)
     4997{
     4998    if (!(*piDbgCfgVar & VBOXGLOBAL_DBG_CFG_VAR_DONE))
     4999        *piDbgCfgVar = (fState ? VBOXGLOBAL_DBG_CFG_VAR_TRUE : VBOXGLOBAL_DBG_CFG_VAR_FALSE)
     5000                     | VBOXGLOBAL_DBG_CFG_VAR_CMD_LINE;
     5001}
     5002
     5003/**
     5004 * Checks the state of a debugger config variable, updating it with the machine
     5005 * settings on the first invocation.
     5006 * 
     5007 * @returns true / false.
     5008 * @param   piDbgCfgVar         The debugger config variable to consult.
     5009 * @param   rMachine            Reference to the machine object.
     5010 * @param   pszExtraDataName    The extra data name relating to this variable.
     5011 */
     5012bool VBoxGlobal::isDebuggerWorker(int *piDbgCfgVar, CMachine &rMachine, const char *pszExtraDataName)
     5013{
     5014    if (!(*piDbgCfgVar & VBOXGLOBAL_DBG_CFG_VAR_DONE) && !rMachine.isNull())
     5015    {
     5016        QString str = mVBox.GetExtraData(pszExtraDataName).toLower().trimmed();
     5017        if (str.contains("veto"))
     5018            *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_DONE | VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     5019        else if (str.isEmpty() || (*piDbgCfgVar & VBOXGLOBAL_DBG_CFG_VAR_CMD_LINE))
     5020            *piDbgCfgVar |= VBOXGLOBAL_DBG_CFG_VAR_DONE;
     5021        else if (   str.startsWith("y")  // yes
     5022                 || str.startsWith("e")  // enabled
     5023                 || str.startsWith("t")  // true
     5024                 || str.startsWith("on")
     5025                 || str.toLongLong() != 0)
     5026            *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_DONE | VBOXGLOBAL_DBG_CFG_VAR_TRUE;
     5027        else if (   str.startsWith("n")  // no
     5028                 || str.startsWith("d")  // disable
     5029                 || str.startsWith("f")  // false
     5030                 || str.toLongLong() == 0)
     5031            *piDbgCfgVar = VBOXGLOBAL_DBG_CFG_VAR_DONE | VBOXGLOBAL_DBG_CFG_VAR_FALSE;
     5032        else
     5033            *piDbgCfgVar |= VBOXGLOBAL_DBG_CFG_VAR_DONE;
     5034    }
     5035
     5036    return (*piDbgCfgVar & VBOXGLOBAL_DBG_CFG_VAR_MASK) == VBOXGLOBAL_DBG_CFG_VAR_TRUE;
     5037}
     5038
     5039#endif /* VBOX_WITH_DEBUGGER_GUI */
    48975040
    48985041/** @fn vboxGlobal
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h

    r31759 r32741  
    166166
    167167#ifdef VBOX_WITH_DEBUGGER_GUI
    168     bool isDebuggerEnabled() const { return mDbgEnabled; }
    169     bool isDebuggerAutoShowEnabled() const { return mDbgAutoShow; }
    170     bool isDebuggerAutoShowCommandLineEnabled() const { return mDbgAutoShowCommandLine; }
    171     bool isDebuggerAutoShowStatisticsEnabled() const { return mDbgAutoShowStatistics; }
     168    bool isDebuggerEnabled(CMachine &aMachine);
     169    bool isDebuggerAutoShowEnabled(CMachine &aMachine);
     170    bool isDebuggerAutoShowCommandLineEnabled(CMachine &aMachine);
     171    bool isDebuggerAutoShowStatisticsEnabled(CMachine &aMachine);
    172172    RTLDRMOD getDebuggerModule() const { return mhVBoxDbg; }
    173173
     
    712712
    713713    void init();
     714#ifdef VBOX_WITH_DEBUGGER_GUI
     715    void initDebuggerVar(int *piDbgCfgVar, const char *pszEnvVar, const char *pszExtraDataName, bool fDefault = false);
     716    void setDebuggerVar(int *piDbgCfgVar, bool fState);
     717    bool isDebuggerWorker(int *piDbgCfgVar, CMachine &rMachine, const char *pszExtraDataName);
     718#endif
    714719
    715720    bool mValid;
     
    749754     * Use --dbg, the env.var. VBOX_GUI_DBG_ENABLED, --debug or the env.var.
    750755     * VBOX_GUI_DBG_AUTO_SHOW to enable. */
    751     bool mDbgEnabled;
     756    int mDbgEnabled;
    752757    /** Whether to show the debugger automatically with the console.
    753758     * Use --debug or the env.var. VBOX_GUI_DBG_AUTO_SHOW to enable. */
    754     bool mDbgAutoShow;
     759    int mDbgAutoShow;
    755760    /** Whether to show the command line window when mDbgAutoShow is set. */
    756     bool mDbgAutoShowCommandLine;
     761    int mDbgAutoShowCommandLine;
    757762    /** Whether to show the statistics window when mDbgAutoShow is set. */
    758     bool mDbgAutoShowStatistics;
     763    int mDbgAutoShowStatistics;
    759764    /** VBoxDbg module handle. */
    760765    RTLDRMOD mhVBoxDbg;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp

    r32468 r32741  
    661661void UIMachineLogic::prepareDebugger()
    662662{
    663     if (vboxGlobal().isDebuggerAutoShowEnabled())
     663    CMachine machine = uisession()->session().GetMachine();
     664    if (!machine.isNull() && vboxGlobal().isDebuggerAutoShowEnabled(machine))
    664665    {
    665666        /* console in upper left corner of the desktop. */
     
    670671//        move (QPoint (rct.x(), rct.y()));
    671672
    672         if (vboxGlobal().isDebuggerAutoShowStatisticsEnabled())
     673        if (vboxGlobal().isDebuggerAutoShowStatisticsEnabled(machine))
    673674            sltShowDebugStatistics();
    674         if (vboxGlobal().isDebuggerAutoShowCommandLineEnabled())
     675        if (vboxGlobal().isDebuggerAutoShowCommandLineEnabled(machine))
    675676            sltShowDebugCommandLine();
    676677
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp

    r30753 r32741  
    113113#ifdef VBOX_WITH_DEBUGGER_GUI
    114114    /* Debug submenu: */
    115     if (   fOptions & UIMainMenuType_Debug
    116         && vboxGlobal().isDebuggerEnabled())
    117     {
    118         QMenu *pMenuDebug = pActionsPool->action(UIActionIndex_Menu_Debug)->menu();
    119         prepareMenuDebug(pMenuDebug, pActionsPool);
    120         preparedSubMenus << pMenuDebug;
     115    if (fOptions & UIMainMenuType_Debug)
     116    {
     117        CMachine machine; /** @todo we should try get the machine here. But we'll
     118                           *        probably be fine with the cached values. */
     119        if (vboxGlobal().isDebuggerEnabled(machine))
     120        {
     121            QMenu *pMenuDebug = pActionsPool->action(UIActionIndex_Menu_Debug)->menu();
     122            prepareMenuDebug(pMenuDebug, pActionsPool);
     123            preparedSubMenus << pMenuDebug;
     124        }
    121125    }
    122126#endif
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp

    r32407 r32741  
    520520    /* HACK ALERT! Really ugly workaround for the resizing to 9x1 done by DevVGA if provoked before power on. */
    521521    QSize fb(m_pFrameBuffer->width(), m_pFrameBuffer->height());
    522     if ((fb.width() < 16 || fb.height() < 16) && (vboxGlobal().isStartPausedEnabled() || vboxGlobal().isDebuggerAutoShowEnabled()))
     522    if (fb.width() < 16 || fb.height() < 16)
     523    {
     524        CMachine machine = uisession()->session().GetMachine();
     525        if (   vboxGlobal().isStartPausedEnabled()
     526            || vboxGlobal().isDebuggerAutoShowEnabled(machine))
    523527        fb = QSize(640, 480);
     528    }
    524529    return QSize(fb.width() + frameWidth() * 2, fb.height() + frameWidth() * 2);
    525530#else /* VBOX_WITH_DEBUGGER */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r32482 r32741  
    185185
    186186    /* Power UP machine: */
    187     CProgress progress = vboxGlobal().isStartPausedEnabled() || vboxGlobal().isDebuggerAutoShowEnabled() ?
     187    CProgress progress = vboxGlobal().isStartPausedEnabled() || vboxGlobal().isDebuggerAutoShowEnabled(machine) ?
    188188                         console.PowerUpPaused() : console.PowerUp();
    189189
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