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
If you use the GDB pretty printer for wx, it will just print the string content.It is just an workaround of this issue.
Thanks I'll look at it.
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
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.
Don't worry. The fix should be version agnostic.
Fixed in svn.
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. :)
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)
Have my fix eradicated the parsing error?
For the printers are you sure you've disabled the watch scripts in the debugger settings?
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