diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py
index 4394e630afb4da501369ca52a4c5cfc772767fc2..93f8b47b27d974a139c1c384e50886ccaa9f1db4 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.py
+++ b/share/qtcreator/gdbmacros/gdbmacros.py
@@ -1855,10 +1855,21 @@ def qdump__std__string(d, item):
 
 def qdump__std__vector(d, item):
     impl = item.value["_M_impl"]
-    start = impl["_M_start"]
-    finish = impl["_M_finish"]
+    type = item.value.type.template_argument(0)
     alloc = impl["_M_end_of_storage"]
-    size = finish - start
+    isBool = str(type) == 'bool'
+    if isBool:
+        start = impl["_M_start"]["_M_p"]
+        finish = impl["_M_finish"]["_M_p"]
+        # FIXME: 32 is sizeof(unsigned long) * CHAR_BIT
+        storagesize = 32
+        size = (finish - start) * storagesize
+        size += impl["_M_finish"]["_M_offset"]
+        size -= impl["_M_start"]["_M_offset"]
+    else:
+        start = impl["_M_start"]
+        finish = impl["_M_finish"]
+        size = finish - start
 
     check(0 <= size and size <= 1000 * 1000 * 1000)
     check(finish <= alloc)
@@ -1869,11 +1880,18 @@ def qdump__std__vector(d, item):
     d.putItemCount(size)
     d.putNumChild(size)
     if d.isExpanded(item):
-        with Children(d, [size, 10000], item.value.type.template_argument(0)):
-            p = start
-            for i in d.childRange():
-                d.putItem(Item(p.dereference(), item.iname, i))
-                p += 1
+        if isBool:
+            with Children(d, [size, 10000], type):
+                for i in d.childRange():
+                    q = start + i / storagesize
+                    data = (q.dereference() >> (i % storagesize)) & 1
+                    d.putBoolItem(str(i), select(data, "true", "false"))
+        else:
+            with Children(d, [size, 10000], type):
+                p = start
+                for i in d.childRange():
+                    d.putItem(Item(p.dereference(), item.iname, i))
+                    p += 1
 
 
 def qdump__string(d, item):
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index 464e18b7365a223f8613764039f42c7ad119f719..a165442671c90eb1c827ab8795417d1f6be4e904 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -1119,6 +1119,9 @@ void testStdVector()
     std::vector<bool> vec;
     vec.push_back(true);
     vec.push_back(false);
+    vec.push_back(false);
+    vec.push_back(true);
+    vec.push_back(false);
 }
 
 void testQStandardItemModel()