aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-02-03 13:47:26 +0100
committerhjk <hjk121@nokiamail.com>2014-02-03 14:12:58 +0100
commit10f0044031d1aba06aacbcb628aaa4a35a459438 (patch)
tree21baf91b55493ac6fed7bda57da8214e0d8479ef /share
parent22f9d58b0d75deec01c23f6a09eb67150d7d485b (diff)
Debugger: Allow incremental expansion of large stacks
Task-number: QTCREATORBUG-11108 Change-Id: Id1a155688e0e9bbe0d45cde20563929b7370695d Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/lldbbridge.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index b460d0b912..4b245f456c 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -800,11 +800,12 @@ class Dumper(DumperBase):
return i
return None
- def reportStack(self, _ = None):
+ def reportStack(self, args = {}):
if not self.process:
self.report('msg="No process"')
return
thread = self.currentThread()
+ limit = args.get('stacklimit', -1)
if not thread:
self.report('msg="No thread"')
return
@@ -813,12 +814,17 @@ class Dumper(DumperBase):
frameId = frame.GetFrameID()
else:
frameId = 0;
+
+ (n, isLimited) = (limit, True) if limit > 0 else (thread.GetNumFrames(), False)
+
result = 'stack={current-frame="%s"' % frameId
result += ',current-thread="%s"' % thread.GetThreadID()
result += ',frames=['
- n = thread.GetNumFrames()
for i in xrange(n):
frame = thread.GetFrameAtIndex(i)
+ if not frame.IsValid():
+ isLimited = False
+ break
lineEntry = frame.GetLineEntry()
line = lineEntry.GetLine()
usable = line != 0
@@ -830,7 +836,10 @@ class Dumper(DumperBase):
result += ',fullname="%s"' % fileName(lineEntry.file)
result += ',usable="%d"' % usable
result += ',file="%s"},' % fileName(lineEntry.file)
- result += '],hasmore="0"},'
+ result += ']'
+ result += ',hasmore="%d"' % isLimited
+ result += ',limit="%d"' % limit
+ result += '}'
self.report(result)
def putBetterType(self, type):
@@ -1239,7 +1248,7 @@ class Dumper(DumperBase):
usableFrame = self.firstUsableFrame(stoppedThread)
if usableFrame:
stoppedThread.SetSelectedFrame(usableFrame)
- self.reportStack()
+ self.reportStack({'stacklimit': 20})
self.reportThreads()
self.reportLocation()
self.reportVariables()
@@ -1458,8 +1467,14 @@ class Dumper(DumperBase):
% (result.Succeeded(), result.GetOutput(), result.GetError()))
def activateFrame(self, args):
+ thread = args['thread']
self.currentThread().SetSelectedFrame(args['index'])
- self.reportData()
+ state = self.process.GetState()
+ if state == lldb.eStateStopped:
+ self.reportStack(args)
+ self.reportThreads()
+ self.reportLocation()
+ self.reportVariables()
def selectThread(self, args):
self.process.SetSelectedThreadByID(args['id'])