summaryrefslogtreecommitdiffstats
path: root/lldb/utils/lui/breakwin.py
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-07-23 17:47:08 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-07-23 17:47:08 +0000
commit93f505942c8091a3ebbf6f08764635f19dc79095 (patch)
tree70a82c65c774eab5b060e2a2c39b0996d2c1a1cf /lldb/utils/lui/breakwin.py
parentea5c94b497cfc43f9ec513f721e03aa5c669249a (diff)
downloadbcm5719-llvm-93f505942c8091a3ebbf6f08764635f19dc79095.tar.gz
bcm5719-llvm-93f505942c8091a3ebbf6f08764635f19dc79095.zip
[Utils] Add back utils directory
Due to a bug my earlier commit removed the whole utils directory: https://reviews.llvm.org/D65123 llvm-svn: 366830
Diffstat (limited to 'lldb/utils/lui/breakwin.py')
-rw-r--r--lldb/utils/lui/breakwin.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/lldb/utils/lui/breakwin.py b/lldb/utils/lui/breakwin.py
new file mode 100644
index 00000000000..a12b3a96fe4
--- /dev/null
+++ b/lldb/utils/lui/breakwin.py
@@ -0,0 +1,93 @@
+##===-- breakwin.py ------------------------------------------*- Python -*-===##
+##
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+##
+##===----------------------------------------------------------------------===##
+
+import cui
+import curses
+import lldb
+import lldbutil
+import re
+
+
+class BreakWin(cui.ListWin):
+
+ def __init__(self, driver, x, y, w, h):
+ super(BreakWin, self).__init__(x, y, w, h)
+ self.driver = driver
+ self.update()
+ self.showDetails = {}
+
+ def handleEvent(self, event):
+ if isinstance(event, lldb.SBEvent):
+ if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
+ self.update()
+ if isinstance(event, int):
+ if event == ord('d'):
+ self.deleteSelected()
+ if event == curses.ascii.NL or event == curses.ascii.SP:
+ self.toggleSelected()
+ elif event == curses.ascii.TAB:
+ if self.getSelected() != -1:
+ target = self.driver.getTarget()
+ if not target.IsValid():
+ return
+ i = target.GetBreakpointAtIndex(self.getSelected()).id
+ self.showDetails[i] = not self.showDetails[i]
+ self.update()
+ super(BreakWin, self).handleEvent(event)
+
+ def toggleSelected(self):
+ if self.getSelected() == -1:
+ return
+ target = self.driver.getTarget()
+ if not target.IsValid():
+ return
+ bp = target.GetBreakpointAtIndex(self.getSelected())
+ bp.SetEnabled(not bp.IsEnabled())
+
+ def deleteSelected(self):
+ if self.getSelected() == -1:
+ return
+ target = self.driver.getTarget()
+ if not target.IsValid():
+ return
+ bp = target.GetBreakpointAtIndex(self.getSelected())
+ target.BreakpointDelete(bp.id)
+
+ def update(self):
+ target = self.driver.getTarget()
+ if not target.IsValid():
+ self.win.erase()
+ self.win.noutrefresh()
+ return
+ selected = self.getSelected()
+ self.clearItems()
+ for i in range(0, target.GetNumBreakpoints()):
+ bp = target.GetBreakpointAtIndex(i)
+ if bp.IsInternal():
+ continue
+ text = lldbutil.get_description(bp)
+ # FIXME: Use an API for this, not parsing the description.
+ match = re.search('SBBreakpoint: id = ([^,]+), (.*)', text)
+ try:
+ id = match.group(1)
+ desc = match.group(2).strip()
+ if bp.IsEnabled():
+ text = '%s: %s' % (id, desc)
+ else:
+ text = '%s: (disabled) %s' % (id, desc)
+ except ValueError as e:
+ # bp unparsable
+ pass
+
+ if self.showDetails.setdefault(bp.id, False):
+ for location in bp:
+ desc = lldbutil.get_description(
+ location, lldb.eDescriptionLevelFull)
+ text += '\n ' + desc
+ self.addItem(text)
+ self.setSelected(selected)
OpenPOWER on IntegriCloud