From 38b5cafe7947e09bacbfe354d0cbc6bfe5968c0b Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 24 Aug 2011 13:51:49 +0200 Subject: [PATCH] debugger: make manual tests 'auto-break' on demand Change-Id: Iaec13fe6634230ca3df5f6fd92470a72ce32c266 Reviewed-on: http://codereview.qt.nokia.com/3494 Reviewed-by: hjk --- .../debugger/simple/simple_test_app.cpp | 224 ++++++++++-------- 1 file changed, 120 insertions(+), 104 deletions(-) diff --git a/tests/manual/debugger/simple/simple_test_app.cpp b/tests/manual/debugger/simple/simple_test_app.cpp index 3ea43159466..72e0ec9ca42 100644 --- a/tests/manual/debugger/simple/simple_test_app.cpp +++ b/tests/manual/debugger/simple/simple_test_app.cpp @@ -32,12 +32,8 @@ //#include -//template class B; B foo() {} - void dummyStatement(...) {} -#include "../simple/deep/deep/simple_test_app.h" - #include #include #include @@ -93,6 +89,15 @@ void dummyStatement(...) {} #include +// 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 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 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 flist2; - // <=== Break here. + BREAK_HERE; flist2.push(1); flist2.push(2); dummyStatement(&flist2); @@ -1517,7 +1531,7 @@ namespace stdstack { void testStdStack3() { std::stack 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 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 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 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 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(list)); vector.push_back(0); - // <=== Break here. + BREAK_HERE; dummyStatement(&vector, &list); } @@ -1726,7 +1740,7 @@ void testQStack() QStack 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(); - // <== 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 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 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 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 vec; - // <== Break here.. + BREAK_HERE; // step over // check that the display is ok. vec.append(true); @@ -2125,7 +2139,7 @@ namespace qvector { { QVector > v; QVector > *pv = &v; - // <=== Break here. + BREAK_HERE; v.append(QList() << 1); v.append(QList() << 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 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 i; - // <=== Break here. + BREAK_HERE; // Step. i = 1; i = 3; @@ -2957,7 +2971,7 @@ namespace boost { void testBoostOptional2() { boost::optional sl; - // <=== Break here. + BREAK_HERE; // Step. sl = (QStringList() << "xxx" << "yyy"); sl.get().append("zzz"); @@ -2970,7 +2984,7 @@ namespace boost { boost::shared_ptr i(new int(43)); boost::shared_ptr j = i; boost::shared_ptr 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::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 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 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; }