diff options
author | hjk <hjk121@nokiamail.com> | 2014-02-03 13:47:26 +0100 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2014-02-03 14:12:58 +0100 |
commit | 10f0044031d1aba06aacbcb628aaa4a35a459438 (patch) | |
tree | 21baf91b55493ac6fed7bda57da8214e0d8479ef /share | |
parent | 22f9d58b0d75deec01c23f6a09eb67150d7d485b (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.py | 25 |
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']) |