OSDN Git Service

debugger: make manual tests 'auto-break' on demand
authorhjk <qtc-committer@nokia.com>
Wed, 24 Aug 2011 11:51:49 +0000 (13:51 +0200)
committerhjk <qthjk@ovi.com>
Wed, 24 Aug 2011 11:55:03 +0000 (13:55 +0200)
Change-Id: Iaec13fe6634230ca3df5f6fd92470a72ce32c266
Reviewed-on: http://codereview.qt.nokia.com/3494
Reviewed-by: hjk <qthjk@ovi.com>
tests/manual/debugger/simple/simple_test_app.cpp

index 3ea4315..72e0ec9 100644 (file)
 
 //#include <complex>
 
-//template <typename T> class B;  B foo() {}
-
 void dummyStatement(...) {}
 
-#include "../simple/deep/deep/simple_test_app.h"
-
 #include <QtCore/QDebug>
 #include <QtCore/QDateTime>
 #include <QtCore/QDir>
@@ -93,6 +89,15 @@ void dummyStatement(...) {}
 
 #include <stdarg.h>
 
+// For the full manual test, change the '#if 0' to '#if 1'
+#if 1
+#define BREAK_HERE /**/
+#else
+#define BREAK_HERE asm("int $3; mov %eax, %eax")
+#endif
+
+#include "../simple/deep/deep/simple_test_app.h"
+
 #define USE_PRIVATE 1
 //#define USE_BOOST 1
 //#define USE_EIGEN 1
@@ -134,7 +139,9 @@ namespace multibp {
     public:
         explicit Vector(int size)
             : m_size(size), m_data(new T[size])
-        {} // <=== Break here.
+        {
+            BREAK_HERE;
+        }
         ~Vector() { delete [] m_data; }
         int size() const { return m_size; }
     private:
@@ -348,7 +355,7 @@ namespace anon {
         a.i = 2;
         a.i = 3;
         Something s;
-        // <== Break here.
+        BREAK_HERE;
         // Step.
         s.foo();
         dummyStatement(&a, &s);
@@ -363,7 +370,7 @@ namespace qbytearray {
     void testQByteArray1()
     {
         QByteArray ba;
-        // <== Break here.
+        BREAK_HERE;
         ba += "Hello";
         ba += '"';
         ba += "World";
@@ -378,7 +385,7 @@ namespace qbytearray {
         QByteArray ba;
         for (int i = 256; --i >= 0; )
             ba.append(char(i));
-        // <== Break here.
+        BREAK_HERE;
         QString s(10000, 'x');
         std::string ss(10000, 'c');
         dummyStatement(&ba, &ss, &s);
@@ -392,7 +399,7 @@ namespace qbytearray {
         QByteArray buf1(str1);
         QByteArray buf2(str2);
         QByteArray buf3(str3);
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&buf1, &buf2, &buf3);
     }
 
@@ -434,7 +441,7 @@ namespace qdatetime {
     void testQDate()
     {
         QDate date;
-        // <== Break here.
+        BREAK_HERE;
         // Step, check display.
         date = QDate::currentDate();
         date = date.addDays(5);
@@ -445,7 +452,7 @@ namespace qdatetime {
     void testQTime()
     {
         QTime time;
-        // <== Break here.
+        BREAK_HERE;
         // Step, check display.
         time = QTime::currentTime();
         time = time.addSecs(5);
@@ -456,7 +463,7 @@ namespace qdatetime {
     void testQDateTime()
     {
         QDateTime date;
-        // <== Break here.
+        BREAK_HERE;
         // Step, check display.
         date = QDateTime::currentDateTime();
         date = date.addSecs(5);
@@ -506,7 +513,7 @@ namespace qhostaddress {
     {
         QHostAddress ha1(129u * 256u * 256u * 256u + 130u);
         QHostAddress ha2("127.0.0.1");
-        // <== Break here.
+        BREAK_HERE;
         // Check ha1 and ha2 look correct.
         dummyStatement(&ha1, &ha2);
     }
@@ -842,7 +849,7 @@ namespace qobject {
         QObject::connect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
         QObject::disconnect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
         child.setObjectName("A renamed Child");
-        // <=== Break here.
+        BREAK_HERE;
         // Expand all.
         dummyStatement(&parent, &child);
     }
@@ -920,14 +927,6 @@ namespace qobject {
         obs.append(&app);
         ob1.setObjectName("A Subobject");
     #endif
-
-    #if 1
-        QString str = QString::fromUtf8("XXXXXXXXXXXXXXyyXXX ö");
-        QLabel l(str);
-        l.setObjectName("Some Label");
-        l.show();
-        //app.exec();
-    #endif
     }
 
     class Sender : public QObject
@@ -1052,7 +1051,7 @@ namespace qobject {
         // are displayed properly.
     #if USE_PRIVATE
         DerivedObject ob;
-        // <=== Break here.
+        BREAK_HERE;
         // expand ob and ob.properties
         // step, and check whether x gets updated.
         ob.setX(23);
@@ -1092,7 +1091,7 @@ namespace qregexp {
     {
         // Works with Python dumpers only.
         QRegExp re(QString("a(.*)b(.*)c"));
-        // <=== Break here.
+        BREAK_HERE;
         // Step over until end, check display looks ok.
         QString str1 = "a1121b344c";
         QString str2 = "Xa1121b344c";
@@ -1109,7 +1108,7 @@ namespace qrect {
     void testQPoint()
     {
         QPoint s;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         s = QPoint(100, 200);
         dummyStatement(&s);
@@ -1118,7 +1117,7 @@ namespace qrect {
     void testQPointF()
     {
         QPointF s;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         s = QPointF(100, 200);
         dummyStatement(&s);
@@ -1127,7 +1126,7 @@ namespace qrect {
     void testQRect()
     {
         QRect rect;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         rect = QRect(100, 100, 200, 200);
         dummyStatement(&rect);
@@ -1136,7 +1135,7 @@ namespace qrect {
     void testQRectF()
     {
         QRectF rect;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         rect = QRectF(100, 100, 200, 200);
         dummyStatement(&rect);
@@ -1145,7 +1144,7 @@ namespace qrect {
     void testQSize()
     {
         QSize s;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         s = QSize(100, 200);
         dummyStatement(&s);
@@ -1154,7 +1153,7 @@ namespace qrect {
     void testQSizeF()
     {
         QSizeF s;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over, check display looks sane.
         s = QSizeF(100, 200);
         dummyStatement(&s);
@@ -1179,7 +1178,7 @@ namespace qregion {
     {
         // Works with Python dumpers only.
         QRegion region;
-        // <=== Break here.
+        BREAK_HERE;
         // Step over until end, check display looks sane.
         region += QRect(100, 100, 200, 200);
         region += QRect(300, 300, 400, 500);
@@ -1219,6 +1218,21 @@ void testPlugin()
     }
 }
 
+namespace application {
+
+    void testApplicationStart(int &argc, char *argv[])
+    {
+        QApplication app(argc, argv);
+        QString str = QString::fromUtf8("XXXXXXXXXXXXXXyyXXX ö");
+        QLabel l(str);
+        l.setObjectName("Some Label");
+        l.show();
+        app.exec();
+    }
+
+} // namespace application
+
+
 void testQSet()
 {
     QSet<int> hgg0;
@@ -1313,7 +1327,7 @@ namespace qxml {
         atts.append("name1", "uri1", "localPart1", "value1");
         atts.append("name2", "uri2", "localPart2", "value2");
         atts.append("name3", "uri3", "localPart3", "value3");
-        // <=== Break here.
+        BREAK_HERE;
         // Expand, check that attributes are displayed.
         dummyStatement();
     }
@@ -1495,7 +1509,7 @@ namespace stdstack {
     {
         // This does not work with the compiled dumpers.
         std::stack<int *> plist1;
-        // <=== Break here.
+        BREAK_HERE;
         plist1.push(new int(1));
         plist1.push(0);
         plist1.push(new int(2));
@@ -1508,7 +1522,7 @@ namespace stdstack {
     void testStdStack2()
     {
         std::stack<int> flist2;
-        // <=== Break here.
+        BREAK_HERE;
         flist2.push(1);
         flist2.push(2);
         dummyStatement(&flist2);
@@ -1517,7 +1531,7 @@ namespace stdstack {
     void testStdStack3()
     {
         std::stack<Foo *> plist;
-        // <=== Break here.
+        BREAK_HERE;
         plist.push(new Foo(1));
         plist.push(new Foo(2));
         dummyStatement(&plist);
@@ -1526,7 +1540,7 @@ namespace stdstack {
     void testStdStack4()
     {
         std::stack<Foo> flist;
-        // <=== Break here.
+        BREAK_HERE;
         flist.push(1);
         flist.push(2);
         dummyStatement(&flist);
@@ -1549,7 +1563,7 @@ namespace stdstring {
     {
         std::string str;
         std::wstring wstr;
-        // <=== Break here.
+        BREAK_HERE;
         str += "b";
         wstr += wchar_t('e');
         str += "d";
@@ -1568,7 +1582,7 @@ namespace stdstring {
     {
         std::string str = "foo";
         QList<std::string> l;
-        // <=== Break here.
+        BREAK_HERE;
         l.push_back(str);
         l.push_back(str);
         l.push_back(str);
@@ -1580,7 +1594,7 @@ namespace stdstring {
     {
         std::string str = "foo";
         std::vector<std::string> v;
-        // <=== Break here.
+        BREAK_HERE;
         v.push_back(str);
         v.push_back(str);
         v.push_back(str);
@@ -1603,7 +1617,7 @@ namespace stdvector {
     void testStdVector1()
     {
         std::vector<int *> v;
-        // <=== Break here.
+        BREAK_HERE;
         // Expand. Step. Check display.
         v.push_back(new int(1));
         v.push_back(0);
@@ -1618,7 +1632,7 @@ namespace stdvector {
         v.push_back(2);
         v.push_back(3);
         v.push_back(4);
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&v);
     }
 
@@ -1629,7 +1643,7 @@ namespace stdvector {
         v.push_back(new Foo(1));
         v.push_back(0);
         v.push_back(new Foo(2));
-        // <=== Break here.
+        BREAK_HERE;
         // Expand v.[0].x
         dummyStatement(&v);
     }
@@ -1641,7 +1655,7 @@ namespace stdvector {
         flist.push_back(2);
         flist.push_back(3);
         flist.push_back(4);
-        // <=== Break here.
+        BREAK_HERE;
         // Expand v.[0].x
         dummyStatement(&flist);
     }
@@ -1654,7 +1668,7 @@ namespace stdvector {
         vec.push_back(false);
         vec.push_back(true);
         vec.push_back(false);
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&vec);
     }
 
@@ -1667,7 +1681,7 @@ namespace stdvector {
         list.push_back(45);
         vector.push_back(new std::list<int>(list));
         vector.push_back(0);
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&vector, &list);
     }
 
@@ -1726,7 +1740,7 @@ void testQStack()
     QStack<bool> vec;
     vec.append(true);
     vec.append(false);
-    // <=== Break here.
+    BREAK_HERE;
     dummyStatement(&vec);
 }
 
@@ -1734,7 +1748,7 @@ void testQStack()
 void testQUrl()
 {
     QUrl url(QString("http://www.nokia.com"));
-    // <=== Break here.
+    BREAK_HERE;
     dummyStatement(&url);
 }
 
@@ -1782,7 +1796,7 @@ namespace qstringlist {
     void testQStringList()
     {
         QStringList l;
-        // <=== Break here.
+        BREAK_HERE;
         l << "Hello ";
         l << " big, ";
         l << " fat ";
@@ -1804,7 +1818,7 @@ namespace formats {
             u = QString::fromUcs4((uint *)w);
         else
             u = QString::fromUtf16((ushort *)w);
-        // <== break here
+        BREAK_HERE;
         // All: Select UTF-8 in "Change Format for Type" in L&W context menu.
         // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
         // Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
@@ -1819,7 +1833,7 @@ namespace formats {
         const char *s = "aöa";
         const char *t = "a\xc3\xb6";
         const wchar_t *w = L"aöa";
-        // <== break here
+        BREAK_HERE;
         // All: Select UTF-8 in "Change Format for Type" in L&W context menu.
         // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
         // Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
@@ -1835,7 +1849,7 @@ namespace formats {
 
         const char s[] = "aöa";
         const wchar_t w[] = L"aöa";
-        // <== break here
+        BREAK_HERE;
         // All: Select UTF-8 in "Change Format for Type" in L&W context menu.
         // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
         // Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
@@ -1924,7 +1938,7 @@ namespace qvariant {
         QVariant::Type t = QVariant::String;
         value = QVariant(t, (void*)0);
         *(QString*)value.data() = QString("Some string");
-        int i = 1; // <=== Break here.
+        int i = 1; BREAK_HERE;
         // Check the variant contains a proper QString.
         dummyStatement(&i);
     }
@@ -1932,7 +1946,7 @@ namespace qvariant {
     void testQVariant2()
     {
         QVariant var;                        // Type 0, invalid
-        // <== Break here.
+        BREAK_HERE;
         // Step through with F10.
         // Check var contains objects of the types indicated.
         var.setValue(true);                  // 1, bool
@@ -1974,7 +1988,7 @@ namespace qvariant {
     void testQVariant3()
     {
         QVariant var;
-        // <== Break here..
+        BREAK_HERE;
         // Expand var.
         // Step with F10.
         // Check the list is updated properly.
@@ -1991,7 +2005,7 @@ namespace qvariant {
         QHostAddress ha("127.0.0.1");
         var.setValue(ha);
         QHostAddress ha1 = var.value<QHostAddress>();
-        // <== Break here.
+        BREAK_HERE;
         // Expand ha, ha1 and var.
         // Check var and ha1 look correct.
         dummyStatement(&ha1);
@@ -2008,7 +2022,7 @@ namespace qvariant {
         var.setValue(my);
         // FIXME: Known to break
         //QString type = var.typeName();
-        var.setValue(my); // <== Break here.
+        var.setValue(my); BREAK_HERE;
         var.setValue(my);
         var.setValue(my);
         var.setValue(my);
@@ -2052,7 +2066,7 @@ namespace qvector {
     {
         // This tests the display of a big vector.
         QVector<int> big(10000);
-        // <=== Break here.
+        BREAK_HERE;
         // step over
         // check that the display updates in reasonable time
         big[1] = 1;
@@ -2072,7 +2086,7 @@ namespace qvector {
     {
         // This tests the display of a vector of pointers to custom structs.
         QVector<Foo> flist;
-        // <== Break here.
+        BREAK_HERE;
         // step over, check display.
         flist.append(1);
         flist.append(2);
@@ -2098,7 +2112,7 @@ namespace qvector {
     {
         // This tests the display of a vector of pointers to custom structs.
         QVector<Foo *> plist;
-        // <=== Break here.
+        BREAK_HERE;
         // step over
         // check that the display is ok.
         plist.append(new Foo(1));
@@ -2113,7 +2127,7 @@ namespace qvector {
     {
         // This tests the display of a vector of custom structs.
         QVector<bool> vec;
-        // <== Break here..
+        BREAK_HERE;
         // step over
         // check that the display is ok.
         vec.append(true);
@@ -2125,7 +2139,7 @@ namespace qvector {
     {
         QVector<QList<int> > v;
         QVector<QList<int> > *pv = &v;
-        // <=== Break here.
+        BREAK_HERE;
         v.append(QList<int>() << 1);
         v.append(QList<int>() << 2 << 3);
         dummyStatement(pv);
@@ -2168,7 +2182,7 @@ namespace noargs {
         list2.append(Goo("Hello", 1));
         list2.append(Goo("World", 2));
 
-        // <=== Break here..
+        BREAK_HERE;
         // check display is ok, especially for _i_ and _k_
 
         dummyStatement(&i, &k);
@@ -2263,7 +2277,7 @@ namespace namespc {
         MyBar bar;
         MyAnon anon;
         baz::MyBaz baz;
-        // <== Break here.
+        BREAK_HERE;
         // step into the doit() functions
         baz.doit(1);
         anon.doit(1);
@@ -2380,7 +2394,7 @@ namespace basic {
         for (int i = 0; i != 3; ++i)
             for (int j = 0; j != 3; ++j)
                 d[i][j] = i + j;
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&x, &f, &d, &ff, &diamond);
     }
 
@@ -2391,7 +2405,7 @@ namespace basic {
         c[1] = 'b';
         c[2] = 'c';
         c[3] = 'd';
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&c);
     }
 
@@ -2402,7 +2416,7 @@ namespace basic {
         s[1] = "b";
         s[2] = "c";
         s[3] = "d";
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&s);
     }
 
@@ -2413,7 +2427,7 @@ namespace basic {
         b[1] = "b";
         b[2] = "c";
         b[3] = "d";
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&b);
     }
 
@@ -2425,7 +2439,7 @@ namespace basic {
             foo[i].a = i;
             foo[i].doit();
         }
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&foo);
     }
 
@@ -2435,7 +2449,7 @@ namespace basic {
     {
         char s[5];
         s[0] = 0;
-        // <=== Break here..
+        BREAK_HERE;
         // Expand 's' in Locals view.
         // Open pinnable tooltip.
         // Step over.
@@ -2454,7 +2468,7 @@ namespace basic {
     void testCharStar()
     {
         char *s = buf;
-        // <=== Break here..
+        BREAK_HERE;
         // Expand 's' in Locals view.
         // Open pinnable tooltip.
         // Step over.
@@ -2484,7 +2498,7 @@ namespace basic {
     {
         // This checks whether bitfields are properly displayed
         S s;
-        // <=== Break here.
+        BREAK_HERE;
         s.i = 0;
         dummyStatement(&s);
     }
@@ -2500,7 +2514,7 @@ namespace basic {
         // This checks whether alphabetic sorting of structure
         // members work.
         Color c;
-        // <=== Break here.
+        BREAK_HERE;
         // Expand c.
         // Toogle "Sort Member Alphabetically" in context menu
         // of "Locals and Expressions" view.
@@ -2521,7 +2535,7 @@ namespace basic {
         myType2 t2 = 0;
         ns::vl j = 1000;
         ns::verylong k = 1000;
-        // <== Break here.
+        BREAK_HERE;
         dummyStatement(&j, &k, &t1, &t2);
     }
 
@@ -2531,7 +2545,7 @@ namespace basic {
         f.doit();
         f.doit();
         f.doit();
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&f);
     }
 
@@ -2539,7 +2553,7 @@ namespace basic {
     {
         // This tests the display of uninitialized data.
 
-        // <=== Break here.
+        BREAK_HERE;
         // Check the display: All values should be <uninitialized> or random data.
         // Check that nothing bad happens if items with random data
         // are expanded.
@@ -2574,7 +2588,7 @@ namespace basic {
         const char *s = "aöa";
         const wchar_t *w = L"aöa";
         QString u;
-        // <== Break here.
+        BREAK_HERE;
         // All: Select UTF-8 in "Change Format for Type" in L&W context menu.
         // Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
         // Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
@@ -2600,7 +2614,7 @@ namespace basic {
 
     void A::doSomething(CVoidPtr cp) const
     {
-        // <=== Break here.
+        BREAK_HERE;
         // Check cp.
         dummyStatement(&cp);
     }
@@ -2610,7 +2624,7 @@ namespace basic {
         A a;
         VoidPtr p = &a;
         CVoidPtr cp = &a;
-        // <=== Break here.
+        BREAK_HERE;
         a.doSomething(cp);
         dummyStatement(&a, &p);
     }
@@ -2618,7 +2632,7 @@ namespace basic {
     void testStringWithNewline()
     {
         QString hallo = "hallo\nwelt";
-        // <=== Break here.
+        BREAK_HERE;
         // Check that string is properly displayed.
         dummyStatement(&hallo);
     }
@@ -2626,7 +2640,7 @@ namespace basic {
     void testMemoryView()
     {
         int a[20];
-        // <=== Break here.
+        BREAK_HERE;
         // Select "Open Memory View" from Locals and Expressions
         //    context menu for item 'a'.
         // Step several times.
@@ -2641,7 +2655,7 @@ namespace basic {
         int i = 42;
         double d = 23;
         QString s = "Foo";
-        // <=== Break here.
+        BREAK_HERE;
         // Select "Open Memory View" from Locals and Expressions
         //    context menu for item 'd'.
         // Check that the opened memory view contains coloured items
@@ -2656,7 +2670,7 @@ namespace basic {
         typedef int &Ref;
         const int c = 44;
         const Ref d = a;
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&a, &b, &c, &d);
     }
 
@@ -2667,7 +2681,7 @@ namespace basic {
         typedef QString &Ref;
         const QString c = "world";
         const Ref d = a;
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&a, &b, &c, &d);
     }
 
@@ -2680,7 +2694,7 @@ namespace basic {
             bigv[i] = time;
             time.addDays(1);
         }
-        // <== Break here.
+        BREAK_HERE;
         // Expand bigv.
         // This is expected to take up to a minute.
         dummyStatement(&bigv);
@@ -2692,7 +2706,7 @@ namespace basic {
         int bigv[N];
         for (int i = 0; i < N; ++i)
             bigv[i] = i;
-        // <== Break here.
+        BREAK_HERE;
         // Expand bigv.
         // This is expected to take up to a minute.
         dummyStatement(&bigv);
@@ -2705,7 +2719,7 @@ namespace basic {
         proc.waitForFinished();
         QByteArray ba = proc.readAllStandardError();
         ba.append('x');
-        // <== Break here.
+        BREAK_HERE;
         // Check there is some contents in ba. Error message is expected.
         dummyStatement(&ba);
     }
@@ -2714,7 +2728,7 @@ namespace basic {
     {
         typedef void (*func_t)();
         func_t f2 = testPeekAndPoke3;
-        // <=== Break here.
+        BREAK_HERE;
         // Check there's a valid display for f2.
         dummyStatement(&f2);
     }
@@ -2946,7 +2960,7 @@ namespace boost {
     void testBoostOptional1()
     {
         boost::optional<int> i;
-        // <=== Break here.
+        BREAK_HERE;
         // Step.
         i = 1;
         i = 3;
@@ -2957,7 +2971,7 @@ namespace boost {
     void testBoostOptional2()
     {
         boost::optional<QStringList> sl;
-        // <=== Break here.
+        BREAK_HERE;
         // Step.
         sl = (QStringList() << "xxx" << "yyy");
         sl.get().append("zzz");
@@ -2970,7 +2984,7 @@ namespace boost {
         boost::shared_ptr<int> i(new int(43));
         boost::shared_ptr<int> j = i;
         boost::shared_ptr<QStringList> sl(new QStringList(QStringList() << "HUH!"));
-        // <=== Break here.
+        BREAK_HERE;
         dummyStatement(&s, &j, &sl);
     }
 
@@ -3108,7 +3122,7 @@ namespace kr {
         KRBase *ptr1 = new KRA;
         KRBase *ptr2 = new KRB;
         ptr2 = new KRB;
-        // <== Break here..
+        BREAK_HERE;
         // check ptr1 is shown as KRA and ptr2 as KRB
         dummyStatement(&ptr1, &ptr2);
     }
@@ -3144,7 +3158,7 @@ namespace eigen {
             }
         }
 
-        // <=== Break here.
+        BREAK_HERE;
         // check that Locals and Expresssions view looks sane
         dummyStatement(&colMajorMatrix, &rowMajorMatrix, &test,
                        &myMatrix, &myDynamicMatrix);
@@ -3159,7 +3173,7 @@ namespace bug842 {
     {
         // http://bugreports.qt.nokia.com/browse/QTCREATORBUG-842
         qWarning("Test");
-        // <=== Break here.
+        BREAK_HERE;
         // Check that Application Output pane contains string "Test".
         dummyStatement();
     }
@@ -3175,7 +3189,7 @@ namespace bug3611 {
         typedef unsigned char byte;
         byte f = '2';
         int *x = (int*)&f;
-        // <=== Break here.
+        BREAK_HERE;
         // Step.
         f += 1;
         f += 1;
@@ -3234,7 +3248,7 @@ namespace bug4497 {
     {
         using namespace std;
         //cin.get(); // if commented out, the debugger doesn't stop at the breakpoint in the next line.
-        cout << "Hello, world!" << endl; // <=== Break here.
+        cout << "Hello, world!" << endl; BREAK_HERE;
 
         int sum = 0;
         for (int i = 1; i <= 10; i++)
@@ -3268,7 +3282,7 @@ namespace bug4904 {
         map.insert(cs1.id, cs1);
         map.insert(cs2.id, cs2);
         QMap<int, CustomStruct>::iterator it = map.begin();
-        // <=== Break here.
+        BREAK_HERE;
         // - expand map/[0]/value
         // - verify  map[0].key == -1
         // - verify  map[0].value.id == -1
@@ -3291,7 +3305,7 @@ namespace bug5046 {
         f.b = 2;
         f.c = 3;
         f.a = 4;
-        // <= Break here.
+        BREAK_HERE;
         // - pop up main editor tooltip over 'f'
         // - verify that the entry is expandable, and expansion works
         dummyStatement(&f);
@@ -3320,7 +3334,7 @@ namespace bug5106 {
     public:
             B5106(int c, int a, int b) : A5106(a, b), m_c(c) {}
 
-            virtual int test() { return 4; } // <=== Break here.
+            virtual int test() { return 4; BREAK_HERE; }
 
     private:
             int m_c;
@@ -3348,7 +3362,7 @@ namespace bug5184 {
     {
         QNetworkRequest request(url);
         QList<QByteArray> raw = request.rawHeaderList();
-        return raw.size();  // <=== Break here.
+        return raw.size();  BREAK_HERE;
     }
 
     void test5184()
@@ -3386,7 +3400,7 @@ namespace qc42170 {
 
     void helper(Object *obj)
     {
-        // <== Break here.
+        BREAK_HERE;
         // Check that obj is shown as a 'Circle' object.
         dummyStatement(obj);
     }
@@ -3423,7 +3437,7 @@ namespace bug5799 {
         S1 a1[10];
         typedef S1 Array[10];
         Array a2;
-        // <=== Break here.
+        BREAK_HERE;
         // Expand s2 and s4.
         // Check there is no <unavailable synchronous data>
         dummyStatement(&s2, &s4, &a1, &a2);
@@ -3448,7 +3462,7 @@ namespace qc41700 {
         m["two"].push_back("2");
         m["two"].push_back("3");
         map_t::const_iterator it = m.begin();
-        // <=== Break here.
+        BREAK_HERE;
         // Check that m is displayed nicely.
         dummyStatement(&it);
     }
@@ -3462,7 +3476,7 @@ namespace cp42895 {
     void g(int c, int d)
     {
         qDebug() << c << d;
-        // <== Break here.
+        BREAK_HERE;
         // Check there are frames for g and f in the stack view.
         dummyStatement(&c, &d);
     }
@@ -3528,7 +3542,7 @@ namespace sanity {
         QObject obj;
         obj.setObjectName("An Object");
 
-        // <=== Break here.
+        BREAK_HERE;
         // Expand all.
         dummyStatement(&s, &qv, &v, &list, &list2, &obj);
     }
@@ -3626,6 +3640,8 @@ int main(int argc, char *argv[])
     bug5184::test5184();
     bug5799::test5799();
 
+    application::testApplicationStart(argc, argv);
+
     return 0;
 }