Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

Splitting debugger in two - specific debugger and common GUI

<< < (99/136) > >>

Jenna:
One annoying thing I found:
if "build to ensure, that project is up to date" is checked, the build-process can not be interrupted if it has started.
In trunk this is still possible.

oBFusCATed:
I know, I have it in the to-do.

This http://smrt.is-a-geek.org/codeblocks/TODO is the full to-do if someone is interested :)

ollydbg:

--- Quote from: oBFusCATed on August 11, 2011, 05:07:17 pm ---
--- Quote from: ollydbg on August 11, 2011, 04:37:35 pm ---Compare with my last patch: my last patch
it seem you did not use "GDBTipWindowView" or "GDBTipWindow" to show the tip?

--- End quote ---
No, I don't :)
See the ValueTooltip class.

--- End quote ---
Thanks, I found it, it was in parsing the gdb command output, here:

--- Code: ---/**
  * Command to display a tooltip about a variables value.
  */
class GdbCmd_TooltipEvaluation : public DebuggerCmd
{
        wxRect m_WinRect;
        wxString m_What;
        wxString m_Type;
        wxString m_Address;
        wxString m_ParseFunc;
    public:
        /** @param what The variable to evaluate.
            @param win A pointer to the tip window pointer.
            @param tiprect The tip window's rect.
        */
        GdbCmd_TooltipEvaluation(DebuggerDriver* driver, const wxString& what, const wxRect& tiprect, const wxString& w_type = wxEmptyString, const wxString& address = wxEmptyString)
            : DebuggerCmd(driver),
            m_WinRect(tiprect),
            m_What(what),
            m_Type(w_type),
            m_Address(address)
        {
            m_Type.Trim(true);
            m_Type.Trim(false);
            m_Cmd = static_cast<GDB_driver*>(m_pDriver)->GetScriptedTypeCommand(w_type, m_ParseFunc);
            if (m_Cmd.IsEmpty())
            {
                // if it's a pointer, automatically dereference it
                if (w_type.Length() > 2 && // at least 2 chars
                    w_type.Last() == _T('*') && // last is *
                    w_type.GetChar(w_type.Length() - 2) != _T('*') && // second last is not * (i.e. doesn't end with **)
                    !w_type.Contains(_T("char "))) // not char* (special case)
                {
                    m_What = wxT("*") + m_What;
                }

                m_Cmd << wxT("output ");
                m_Cmd << m_What;
            }
            else
            {
                try
                {
                    SqPlus::SquirrelFunction<wxString&> f(cbU2C(m_Cmd));
                    m_Cmd = f(w_type, what, 0, 0);
                }
                catch (SquirrelError e)
                {
                    m_Cmd = cbC2U(e.desc);
                    m_pDriver->DebugLog(_T("Script exception: ") + m_Cmd);
                }
            }
        }
        void ParseOutput(const wxString& output)
        {
            wxString contents;
            if (output.StartsWith(_T("No symbol ")) || output.StartsWith(_T("Attempt to ")))
                contents = output;
            else
            {
                if (!m_ParseFunc.IsEmpty())
                {
                    try
                    {
                        SqPlus::SquirrelFunction<wxString&> f(cbU2C(m_ParseFunc));
                        contents << f(output, 0);
                    }
                    catch (SquirrelError e)
                    {
                        contents << cbC2U(e.desc);
                        m_pDriver->DebugLog(_T("Script exception: ") + contents);
                    }
                }
                else
                {
                    contents << output;
                    // the following breaks the text when it *is* a hex number
//                    if (reGenericHexAddress.Matches(output))
//                    {
//                        contents.Replace(reGenericHexAddress.GetMatch(output, 1), _T(""));
//                        contents.Trim(false);
//                    }
                }
            }
            contents.Trim(true);
            contents.Trim(false);

            GDBWatch::Pointer watch(new GDBWatch(m_What));
            watch->SetType(m_Type);

            ParseGDBWatchValue(*watch, contents);

            if (Manager::Get()->GetDebuggerManager()->ShowValueTooltip(watch, m_WinRect))
            {
                watch->SetForTooltip(true);
                m_pDriver->GetDebugger()->AddWatchNoUpdate(watch);
            }
        }
};

--- End code ---


--- Quote from: oBFusCATed on August 11, 2011, 11:07:39 pm ---I know, I have it in the to-do.
This http://smrt.is-a-geek.org/codeblocks/TODO is the full to-do if someone is interested :)

--- End quote ---
too many todos.
about the python pretty printer, the latest cvs version of GDB has supply some command like:
"info pretty-printer" to show the installed pretty printers.
"enable/disable pretty-printer" to enable/disable this feature.
These feature can be added when you have some gdb's own pretty-printer utilities scripts in share/gdb folder (I only tested under MinGW).

ollydbg:
a test patch(based on rev 7366 debugger branch) to enable this feature(emulate a message when ctrl pressed when debugging)
need for testing :D

oBFusCATed:

--- Quote from: ollydbg on August 12, 2011, 03:37:33 am ---too many todos.

--- End quote ---
I'm adding more items, then removing  8)


--- Quote from: ollydbg on August 12, 2011, 08:59:56 am ---a test patch(based on rev 7366 debugger branch) to enable this feature(emulate a message when ctrl pressed when debugging)
need for testing :D

--- End quote ---
I'll test it on linux...

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version