Code::Blocks Forums

User forums => Using Code::Blocks => Topic started by: BlueHazzard on January 28, 2016, 01:26:34 AM

Title: Debugger: GDB Parsing error
Post by: BlueHazzard on January 28, 2016, 01:26:34 AM
Hi, i try to debug some wxWidgets code and get a parsing error.
Debugger output:
[debug]> output *str
[debug]{<wxStringBase> = {static npos = 4294967295, m_pchData = 0x75225a4 L'/' <repeats 43 times>, "\\n//\\n", '/' <repeats 43 times>}, <No data fields>}>>>>>>cb_gdb:


as output in the watch window i get:

*str                          | Parsing GDB output failed for '*str'!
+ <wxStringBase>   |
      npos                   | 4294967295


greetings
Title: Re: Debugger: GDB Parsing error
Post by: ollydbg on January 28, 2016, 01:32:58 AM
If you use the GDB pretty printer for wx, it will just print the string content.It is just an workaround of this issue.
Title: Re: Debugger: GDB Parsing error
Post by: oBFusCATed on January 28, 2016, 09:24:19 AM
Thanks I'll look at it.
Title: Re: Debugger: GDB Parsing error
Post by: BlueHazzard on January 28, 2016, 01:05:04 PM
minimal example to reproduce:

wxString tmp = _T("///////////////////////////////\\n// \\n/////////////////////////");

just watch tmp and you will get the error described above.

Quote from: ollydbg on January 28, 2016, 01:32:58 AM
If you use the GDB pretty printer for wx, it will just print the string content.It is just an workaround of this issue.
I don't know why, but my pretty printers are not working... I think i have messed somehow wx2.9(3.0) printers and wx2.8 printers. They are registered, but not working
class wxStringPrinter:
    def __init__(self, val):
        self.val = val

    def to_string(self):
        try:
            return self.val['m_pchData']
        except:
            return self.val['m_impl']['_M_dataplus']['_M_p']

    def display_hint(self):
        return 'string'


greetings
Title: Re: Debugger: GDB Parsing error
Post by: MortenMacFly on January 28, 2016, 02:25:36 PM
Quote from: oBFusCATed on January 28, 2016, 09:24:19 AM
Thanks I'll look at it.
IMHO this is different depending on whether you are targeting wx30 or wx28... So please be careful not to break the other version.
Title: Re: Debugger: GDB Parsing error
Post by: oBFusCATed on January 28, 2016, 09:21:25 PM
Don't worry. The fix should be version agnostic.
Title: Re: Debugger: GDB Parsing error
Post by: oBFusCATed on January 28, 2016, 11:41:15 PM
Fixed in svn.
Title: Re: Debugger: GDB Parsing error
Post by: ollydbg on January 30, 2016, 08:35:08 AM
This is what I used pretty printer for wxString:

class wxStringPrinter:

    def __init__(self, val):
        self.val = val

    def to_string(self):
        ret = ""
        wx29 = 0
        try:
            # wx-28 has m_pchData
            self.val['m_pchData']
        except Exception:
            wx29 = 1

        try:
            if wx29:
                # return "wx29+ string"
                dataAsCharPointer = self.val['m_impl']['_M_dataplus']['_M_p']
            else:
                dataAsCharPointer = self.val['m_pchData']
                # return "wx28 string"
            ret = dataAsCharPointer
        except Exception:
            # swallow the exception and return empty string
            pass
        return ret

    def display_hint (self):
        return 'wxString'


It works fine for both wx 2.8 and wx 3.x. :)
Title: Re: Debugger: GDB Parsing error
Post by: BlueHazzard on January 30, 2016, 09:45:54 PM
strangely this is not working for me....

anyway if i find time i will investigate, i think the whole python stuff does not work here (if i add a print command in the scripts it gets printed, so the interpreter is working)
Title: Re: Debugger: GDB Parsing error
Post by: oBFusCATed on January 30, 2016, 10:45:34 PM
Have my fix eradicated the parsing error?
For the printers are you sure you've disabled the watch scripts in the debugger settings?
Title: Re: Debugger: GDB Parsing error
Post by: BlueHazzard on January 31, 2016, 02:50:26 PM
Quote from: oBFusCATed on January 30, 2016, 10:45:34 PM
Have my fix eradicated the parsing error?
For the printers are you sure you've disabled the watch scripts in the debugger settings?
Yes your fix is working. And yes i have disabled the scripts in the debugger settings. On c::b site all is working, but on the gdb site something is going wrong... anyway, this is OT

thank you and greetings