From bba1b0932a381336e77c30b39e0a39a00e6cf172 Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Thu, 13 Jun 2013 18:22:44 +0200
Subject: [PATCH] Debugger: Enable breakpoints on throw and catch with LLDB

Change-Id: Ia7305aa6b44b7b9edf33a6828d965ab84289e353
Reviewed-by: hjk <hjk121@nokiamail.com>
---
 share/qtcreator/dumper/lbridge.py | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/share/qtcreator/dumper/lbridge.py b/share/qtcreator/dumper/lbridge.py
index 8a03556a29c..5cbbba6087d 100644
--- a/share/qtcreator/dumper/lbridge.py
+++ b/share/qtcreator/dumper/lbridge.py
@@ -862,20 +862,25 @@ class Dumper:
             n = thread.GetNumFrames()
             if n > 4:
                 n = 4
+            firstUsable = None
             for i in xrange(n):
                 frame = thread.GetFrameAtIndex(i)
                 lineEntry = frame.GetLineEntry()
+                line = lineEntry.GetLine()
+                usable = line != 0
+                if usable and not firstUsable:
+                    firstUsable = i
                 result += '{pc="0x%x"' % frame.GetPC()
                 result += ',level="%d"' % frame.idx
                 result += ',addr="0x%x"' % frame.GetPCAddress().GetLoadAddress(self.target)
                 result += ',func="%s"' % frame.GetFunctionName()
-                result += ',line="%d"' % lineEntry.GetLine()
+                result += ',line="%d"' % line
                 result += ',fullname="%s"' % fileName(lineEntry.file)
-                result += ',usable="1"'
+                result += ',usable="%d"' % usable
                 result += ',file="%s"},' % fileName(lineEntry.file)
-
-            hasmore = '0'
-            result += '],hasmore="%s"},' % hasmore
+            if not firstUsable:
+                firstUsable = 0
+            result += '],hasmore="0",first-usable="%s"},' % firstUsable
             self.report(result)
 
     def putType(self, type, priority = 0):
@@ -1225,6 +1230,12 @@ class Dumper:
         elif bpType == BreakpointAtMain:
             bpNew = self.target.BreakpointCreateByName(
                 "main", self.target.GetExecutable().GetFilename())
+        elif bpType == BreakpointAtThrow:
+            bpNew = self.target.BreakpointCreateForException(
+                lldb.eLanguageTypeC_plus_plus, False, True)
+        elif bpType == BreakpointAtCatch:
+            bpNew = self.target.BreakpointCreateForException(
+                lldb.eLanguageTypeC_plus_plus, True, False)
         else:
             warn("UNKNOWN TYPE")
         bpNew.SetIgnoreCount(int(args["ignorecount"]))
-- 
GitLab