forked from qt-creator/qt-creator
Debugger: Remove workaround for GDB < 7.2 missing frame.block
This practically means that the >= 7.2 requirement is now a hard requirement. Change-Id: I6c3abbc625443ded182d2da101e04d96e3bed26d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
This commit is contained in:
@@ -154,13 +154,6 @@ try:
|
|||||||
warn("FRAME NOT ACCESSIBLE FOR UNKNOWN REASONS")
|
warn("FRAME NOT ACCESSIBLE FOR UNKNOWN REASONS")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# New in 7.2
|
|
||||||
hasBlock = 'block' in __builtin__.dir(frame)
|
|
||||||
|
|
||||||
items = []
|
|
||||||
#warn("HAS BLOCK: %s" % hasBlock)
|
|
||||||
if hasBlock:
|
|
||||||
#warn("IS GOOD: %s " % varList)
|
|
||||||
try:
|
try:
|
||||||
block = frame.block()
|
block = frame.block()
|
||||||
#warn("BLOCK: %s " % block)
|
#warn("BLOCK: %s " % block)
|
||||||
@@ -171,6 +164,7 @@ try:
|
|||||||
warn("BLOCK NOT ACCESSIBLE FOR UNKNOWN REASONS")
|
warn("BLOCK NOT ACCESSIBLE FOR UNKNOWN REASONS")
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
items = []
|
||||||
shadowed = {}
|
shadowed = {}
|
||||||
while True:
|
while True:
|
||||||
if block is None:
|
if block is None:
|
||||||
@@ -238,70 +232,6 @@ try:
|
|||||||
break
|
break
|
||||||
|
|
||||||
block = block.superblock
|
block = block.superblock
|
||||||
else:
|
|
||||||
# Assuming gdb 7.0 release or 6.8-symbianelf.
|
|
||||||
filename = createTempFile()
|
|
||||||
#warn("VARLIST: %s " % varList)
|
|
||||||
#warn("FILENAME: %s " % filename)
|
|
||||||
gdb.execute("set logging off")
|
|
||||||
# gdb.execute("set logging redirect off")
|
|
||||||
gdb.execute("set logging file %s" % filename)
|
|
||||||
# gdb.execute("set logging redirect on")
|
|
||||||
gdb.execute("set logging on")
|
|
||||||
try:
|
|
||||||
gdb.execute("info args")
|
|
||||||
# We cannot use "info locals" as at least 6.8-symbianelf
|
|
||||||
# aborts as soon as we hit unreadable memory.
|
|
||||||
# gdb.execute("interpreter mi '-stack-list-locals 0'")
|
|
||||||
# results in &"Recursive internal problem.\n", so we have
|
|
||||||
# the frontend pass us the list of locals.
|
|
||||||
|
|
||||||
# There are two cases, either varList is empty, so we have
|
|
||||||
# to fetch the list here, or it is not empty with the
|
|
||||||
# first entry being a dummy.
|
|
||||||
if len(varList) == 0:
|
|
||||||
gdb.execute("info locals")
|
|
||||||
else:
|
|
||||||
varList = varList[1:]
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
gdb.execute("set logging off")
|
|
||||||
# gdb.execute("set logging redirect off")
|
|
||||||
|
|
||||||
try:
|
|
||||||
temp = open(filename, "r")
|
|
||||||
for line in temp:
|
|
||||||
if len(line) == 0 or line.startswith(" "):
|
|
||||||
continue
|
|
||||||
# The function parameters
|
|
||||||
pos = line.find(" = ")
|
|
||||||
if pos < 0:
|
|
||||||
continue
|
|
||||||
varList.append(line[0:pos])
|
|
||||||
temp.close()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
removeTempFile(filename)
|
|
||||||
#warn("VARLIST: %s " % varList)
|
|
||||||
for name in varList:
|
|
||||||
#warn("NAME %s " % name)
|
|
||||||
item = LocalItem()
|
|
||||||
item.iname = "local." + name
|
|
||||||
item.name = name
|
|
||||||
try:
|
|
||||||
item.value = frame.read_var(name) # this is a gdb value
|
|
||||||
except RuntimeError:
|
|
||||||
pass
|
|
||||||
#continue
|
|
||||||
except:
|
|
||||||
# Something breaking the list, like intermediate gdb warnings
|
|
||||||
# like 'Warning: can't find linker symbol for virtual table for
|
|
||||||
# `std::less<char const*>' value\n\nwarning: found
|
|
||||||
# `myns::QHashData::shared_null' instead [...]
|
|
||||||
# that break subsequent parsing. Chicken out and take the
|
|
||||||
# next "usable" line.
|
|
||||||
continue
|
|
||||||
items.append(item)
|
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user