Debugger: Handle extra dumpers with LLDB

This generalizes part of the previously GDB-only code paths

Change-Id: Id32798073e3c8bcb23bfedf463bebc866c8275e2
Reviewed-by: hjk <hjk@theqtcompany.com>
This commit is contained in:
hjk
2015-01-23 19:09:08 +01:00
parent 39a1293e71
commit eafde22e16
7 changed files with 103 additions and 123 deletions
+3 -74
View File
@@ -14,25 +14,11 @@ import sys
import struct
import types
import importlib
def warn(message):
print("XXX: %s\n" % message.encode("latin1"))
from dumper import *
dumpermodules = [
"qttypes",
"stdtypes",
"misctypes",
"boosttypes",
"creatortypes",
"personaltypes",
]
for mod in dumpermodules:
importlib.import_module(mod)
#######################################################################
#
@@ -150,8 +136,7 @@ ScanStackCommand()
def bbsetup(args = ''):
theDumper.bbsetup()
print(theDumper.reportDumpers())
print(theDumper.findDumperFunctions())
registerCommand("bbsetup", bbsetup)
@@ -1423,55 +1408,6 @@ class Dumper(DumperBase):
with Children(self, 1):
self.listAnonymous(value, name, field.type)
def registerDumper(self, funcname, function):
try:
#warn("FUNCTION: %s " % funcname)
#funcname = function.func_name
if funcname.startswith("qdump__"):
typename = funcname[7:]
self.qqDumpers[typename] = function
self.qqFormats[typename] = self.qqFormats.get(typename, "")
elif funcname.startswith("qform__"):
typename = funcname[7:]
formats = ""
try:
formats = function()
except:
pass
self.qqFormats[typename] = formats
elif funcname.startswith("qedit__"):
typename = funcname[7:]
try:
self.qqEditable[typename] = function
except:
pass
except:
pass
def bbsetup(self):
self.qqDumpers = {}
self.qqFormats = {}
self.qqEditable = {}
self.typeCache = {}
for mod in dumpermodules:
m = importlib.import_module(mod)
dic = m.__dict__
for name in dic.keys():
item = dic[name]
self.registerDumper(name, item)
def reportDumpers(self):
result = "dumpers=["
for key, value in self.qqFormats.items():
if key in self.qqEditable:
result += '{type="%s",formats="%s",editable="true"},' % (key, value)
else:
result += '{type="%s",formats="%s"},' % (key, value)
result += ']'
return result
#def threadname(self, maximalStackDepth, objectPrivateType):
# e = gdb.selected_frame()
# out = ""
@@ -2044,15 +1980,8 @@ registerCommand("threadnames", threadnames)
#
#######################################################################
def reloadDumper(arg):
for mod in dumpermodules:
m = sys.modules[mod]
if sys.version_info[0] >= 3:
importlib.reload(m)
else:
reload(m)
bbsetup()
def reloadDumper(_):
theDumper.reloadDumper();
registerCommand("reload", reloadDumper)