File indexing completed on 2024-05-05 17:33:31

0001 /*
0002     SPDX-FileCopyrightText: 2010 George Kiagiadakis <kiagiadakis.george@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 #include "../../parser/backtraceparser.h"
0007 #include "fakebacktracegenerator.h"
0008 #include <KAboutData>
0009 #include <KLocalizedString>
0010 #include <QCommandLineParser>
0011 #include <QCoreApplication>
0012 #include <QFile>
0013 #include <QMetaEnum>
0014 #include <QSharedPointer>
0015 #include <QTextStream>
0016 
0017 #include <iostream>
0018 
0019 int main(int argc, char **argv)
0020 {
0021     QCoreApplication app(argc, argv);
0022     KAboutData aboutData(QStringLiteral("backtraceparsertest_manual"), i18n("backtraceparsertest_manual"), QStringLiteral("1.0"));
0023     KAboutData::setApplicationData(aboutData);
0024 
0025     QCommandLineParser parser;
0026     parser.addOption(
0027         QCommandLineOption(QStringLiteral("debugger"), i18n("The debugger name passed to the parser factory"), QStringLiteral("name"), QStringLiteral("gdb")));
0028     parser.addPositionalArgument(QStringLiteral("file"), i18n("A file containing the backtrace."), QStringLiteral("[file]"));
0029     aboutData.setupCommandLine(&parser);
0030     parser.process(app);
0031     aboutData.processCommandLine(&parser);
0032 
0033     QString debugger = parser.value(QStringLiteral("debugger"));
0034     if (parser.positionalArguments().isEmpty()) {
0035         parser.showHelp(1);
0036         return 1;
0037     }
0038     const QString file = parser.positionalArguments().constFirst();
0039 
0040     if (!QFile::exists(file)) {
0041         std::cerr << "The specified file does not exist" << std::endl;
0042         return 1;
0043     }
0044 
0045     FakeBacktraceGenerator generator;
0046     QSharedPointer<BacktraceParser> btparser(BacktraceParser::newParser(debugger));
0047     btparser->connectToGenerator(&generator);
0048     generator.sendData(file);
0049 
0050     QMetaEnum metaUsefulness = BacktraceParser::staticMetaObject.enumerator(BacktraceParser::staticMetaObject.indexOfEnumerator("Usefulness"));
0051     std::cout << "Usefulness: " << qPrintable(metaUsefulness.valueToKey(btparser->backtraceUsefulness())) << std::endl;
0052     std::cout << "First valid functions: " << qPrintable(btparser->firstValidFunctions().join(QLatin1Char(' '))) << std::endl;
0053     std::cout << "Simplified backtrace:\n" << qPrintable(btparser->simplifiedBacktrace()) << std::endl;
0054     const QStringList l = static_cast<QStringList>(btparser->librariesWithMissingDebugSymbols());
0055     std::cout << "Missing dbgsym libs: " << qPrintable(l.join(QLatin1Char(' '))) << std::endl;
0056 
0057     return 0;
0058 }