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 }