News:

The new Release 25.03 is out! You can download binaries for Windows and many major Linux distros here .

Main Menu

Debugger: GDB Parsing error

Started by BlueHazzard, January 28, 2016, 01:26:34 AM

Previous topic - Next topic

BlueHazzard

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

ollydbg

If you use the GDB pretty printer for wx, it will just print the string content.It is just an workaround of this issue.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

oBFusCATed

(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

BlueHazzard

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

MortenMacFly

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.
Compiler logging: Settings->Compiler & Debugger->tab "Other"->Compiler logging="Full command line"
C::B Manual: [url="https://www.codeblocks.org/docs/main_codeblocks_en.html"]https://www.codeblocks.org/docs/main_codeblocks_en.html[/url]
C::B FAQ: [url="https://wiki.codeblocks.org/index.php?title=FAQ"]https://wiki.codeblocks.org/index.php?title=FAQ[/url]

oBFusCATed

Don't worry. The fix should be version agnostic.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

oBFusCATed

(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

ollydbg

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. :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

BlueHazzard

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)

oBFusCATed

Have my fix eradicated the parsing error?
For the printers are you sure you've disabled the watch scripts in the debugger settings?
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

BlueHazzard

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