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
minimal example to reproduce:
wxString tmp = _T("///////////////////////////////\\n// \\n/////////////////////////");
just watch tmp and you will get the error described above.
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
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. :)