forked from qt-creator/qt-creator
debugger: speed up dumpers
Change-Id: I1dfd882fd996589d0b044c9014ae445470b36e8f Reviewed-on: http://codereview.qt.nokia.com/3221 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -1,14 +1,32 @@
|
|||||||
|
|
||||||
|
cdbLoaded = False
|
||||||
|
lldbLoaded = False
|
||||||
|
gdbLoaded = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import lldb_bridge
|
#import cdb_bridge
|
||||||
|
cdbLoaded = True
|
||||||
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
#import lldb_bridge
|
||||||
|
lldbLoaded = True
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
#try:
|
try:
|
||||||
if True:
|
|
||||||
import gdb
|
import gdb
|
||||||
|
#gdbLoaded = True
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
#
|
||||||
|
# Infrastructure
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
def registerCommand(name, func):
|
def registerCommand(name, func):
|
||||||
|
|
||||||
@@ -111,7 +129,9 @@ if True:
|
|||||||
name1 = name
|
name1 = name
|
||||||
shadowed[name] = 1
|
shadowed[name] = 1
|
||||||
#warn("SYMBOL %s (%s, %s)): " % (symbol, name, symbol.name))
|
#warn("SYMBOL %s (%s, %s)): " % (symbol, name, symbol.name))
|
||||||
item = Item(0, "local", name1, name1)
|
item = LocalItem()
|
||||||
|
item.iname = "local." + name1
|
||||||
|
item.name = name1
|
||||||
try:
|
try:
|
||||||
item.value = frame.read_var(name, block) # this is a gdb value
|
item.value = frame.read_var(name, block) # this is a gdb value
|
||||||
except:
|
except:
|
||||||
@@ -179,7 +199,9 @@ if True:
|
|||||||
#warn("VARLIST: %s " % varList)
|
#warn("VARLIST: %s " % varList)
|
||||||
for name in varList:
|
for name in varList:
|
||||||
#warn("NAME %s " % name)
|
#warn("NAME %s " % name)
|
||||||
item = Item(0, "local", name, name)
|
item = LocalItem()
|
||||||
|
item.iname = "local." + name
|
||||||
|
item.name = name
|
||||||
try:
|
try:
|
||||||
item.value = frame.read_var(name) # this is a gdb value
|
item.value = frame.read_var(name) # this is a gdb value
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
@@ -232,8 +254,87 @@ if True:
|
|||||||
removeTempFile(filename, file)
|
removeTempFile(filename, file)
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
#
|
||||||
|
# Types
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
PointerCode = gdb.TYPE_CODE_PTR
|
||||||
|
ArrayCode = gdb.TYPE_CODE_ARRAY
|
||||||
|
StructCode = gdb.TYPE_CODE_STRUCT
|
||||||
|
UnionCode = gdb.TYPE_CODE_UNION
|
||||||
|
EnumCode = gdb.TYPE_CODE_ENUM
|
||||||
|
FlagsCode = gdb.TYPE_CODE_FLAGS
|
||||||
|
FunctionCode = gdb.TYPE_CODE_FUNC
|
||||||
|
IntCode = gdb.TYPE_CODE_INT
|
||||||
|
FloatCode = gdb.TYPE_CODE_FLT # Parts of GDB assume that this means complex.
|
||||||
|
VoidCode = gdb.TYPE_CODE_VOID
|
||||||
|
#SetCode = gdb.TYPE_CODE_SET
|
||||||
|
RangeCode = gdb.TYPE_CODE_RANGE
|
||||||
|
StringCode = gdb.TYPE_CODE_STRING
|
||||||
|
#BitStringCode = gdb.TYPE_CODE_BITSTRING
|
||||||
|
#ErrorTypeCode = gdb.TYPE_CODE_ERROR
|
||||||
|
MethodCode = gdb.TYPE_CODE_METHOD
|
||||||
|
#MethodPointerCode = gdb.TYPE_CODE_METHODPTR
|
||||||
|
#MemberPointerCode = gdb.TYPE_CODE_MEMBERPTR
|
||||||
|
ReferenceCode = gdb.TYPE_CODE_REF
|
||||||
|
CharCode = gdb.TYPE_CODE_CHAR
|
||||||
|
BoolCode = gdb.TYPE_CODE_BOOL
|
||||||
|
ComplexCode = gdb.TYPE_CODE_COMPLEX # Fortran ?
|
||||||
|
TypedefCode = gdb.TYPE_CODE_TYPEDEF
|
||||||
|
NamespaceCode = gdb.TYPE_CODE_NAMESPACE
|
||||||
|
#Code = gdb.TYPE_CODE_DECFLOAT # Decimal floating point.
|
||||||
|
#Code = gdb.TYPE_CODE_MODULE # Fortran
|
||||||
|
#Code = gdb.TYPE_CODE_INTERNAL_FUNCTION
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
#
|
||||||
|
# Step Command
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
def sal(args):
|
||||||
|
(cmd, addr) = arg.split(",")
|
||||||
|
lines = catchCliOutput("info line *" + addr)
|
||||||
|
fromAddr = "0x0"
|
||||||
|
toAddr = "0x0"
|
||||||
|
for line in lines:
|
||||||
|
pos0from = line.find(" starts at address") + 19
|
||||||
|
pos1from = line.find(" ", pos0from)
|
||||||
|
pos0to = line.find(" ends at", pos1from) + 9
|
||||||
|
pos1to = line.find(" ", pos0to)
|
||||||
|
if pos1to > 0:
|
||||||
|
fromAddr = line[pos0from : pos1from]
|
||||||
|
toAddr = line[pos0to : pos1to]
|
||||||
|
gdb.execute("maint packet sal%s,%s,%s" % (cmd,fromAddr, toAddr))
|
||||||
|
|
||||||
|
registerCommand("sal", sal)
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
#
|
||||||
|
# Convenience
|
||||||
|
#
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
# Just convienience for 'python print ...'
|
||||||
|
class PPCommand(gdb.Command):
|
||||||
|
def __init__(self):
|
||||||
|
super(PPCommand, self).__init__("pp", gdb.COMMAND_OBSCURE)
|
||||||
|
def invoke(self, args, from_tty):
|
||||||
|
print(eval(args))
|
||||||
|
|
||||||
|
registerCommand("pp", pp)
|
||||||
|
|
||||||
|
# Just convienience for 'python print gdb.parse_and_eval(...)'
|
||||||
|
class PPPCommand(gdb.Command):
|
||||||
|
def __init__(self):
|
||||||
|
super(PPPCommand, self).__init__("ppp", gdb.COMMAND_OBSCURE)
|
||||||
|
def invoke(self, args, from_tty):
|
||||||
|
print(gdb.parse_and_eval(args))
|
||||||
|
|
||||||
#except:
|
PPPCommand()
|
||||||
# pass
|
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user