]> git.siccegge.de Git - frida/frida.git/blobdiff - src/main.cxx
add logging to the Guile module
[frida/frida.git] / src / main.cxx
index b23eb8860d1841551e2ce43a145f2d2ec09e4498..24ddf7a2ad24aca695601d0d6b8d0906b4a5350e 100644 (file)
@@ -1,29 +1,91 @@
-#include "include.hxx"
+#include "disassembler/llvm/include_llvm.hxx"
 
-#include <iostream>
 #include <climits>
 
 #include <QApplication>
+#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0)
+#define ARGPARSE
+#endif
+
+#ifdef ARGPARSE
+#include <QCommandLineParser>
+#endif
 #include <QTextEdit>
 
-#include "Binary.hxx"
-#include "gui/Mainwindow.hxx"
+#include "log4cxx/logger.h"
+#include "log4cxx/basicconfigurator.h"
 
-using std::cout;
-using std::cin;
-using std::cerr;
+#include "gui/Mainwindow.hxx"
+#include "core/InformationManager.hxx"
+#include "disassembler/llvm/LLVMDisassembler.hxx"
+#include "Config.hxx"
 
 int main(int argc, char** argv)
 {
-    llvm::InitializeAllTargetInfos();
-    llvm::InitializeAllTargetMCs();
-    llvm::InitializeAllAsmParsers();
-    llvm::InitializeAllDisassemblers();
+       QApplication app(argc, argv);
+
+       log4cxx::BasicConfigurator::configure();
+       log4cxx::LoggerPtr _logger(log4cxx::Logger::getLogger("main"));
+
+#ifdef ARGPARSE
+       QCommandLineParser parser;
+#endif
+
+       QApplication::setApplicationName("frida");
+       QApplication::setApplicationVersion("0.0");
+       QApplication::addLibraryPath(CONFIG_LIBDIR "/frida/plugins/Interpreter");
+#ifdef ARGPARSE
+       parser.addHelpOption();
+       parser.addVersionOption();
+
+       QCommandLineOption loglevelOption("loglevel", "Control verbosity of logging", "FATAL|ERROR|WARN|INFO|DEBUG|TRACE");
+       loglevelOption.setDefaultValue("INFO");
+       parser.addOption(loglevelOption);
+
+       parser.addPositionalArgument("filename", QCoreApplication::translate("main", "File to disassemble."));
+
+       parser.process(app);
+#endif
+
+       log4cxx::LevelPtr level = log4cxx::Level::getInfo();
+#ifdef ARGPARSE
+       if (parser.value(loglevelOption) != "") {
+               std::string levelstring = parser.value(loglevelOption).toStdString();
+               if (levelstring == "FATAL")
+                       level = log4cxx::Level::getFatal();
+               if (levelstring == "ERROR")
+                       level = log4cxx::Level::getError();
+               if (levelstring == "WARN")
+                       level = log4cxx::Level::getWarn();
+               if (levelstring == "INFO")
+                       level = log4cxx::Level::getInfo();
+               if (levelstring == "DEBUG")
+                       level = log4cxx::Level::getDebug();
+               if (levelstring == "TRACE")
+                       level = log4cxx::Level::getTrace();
+       }
+#endif
+       log4cxx::Logger::getRootLogger()->setLevel(level);
+
+       InformationManager iman;
+
+       LOG4CXX_DEBUG(_logger, "Initializing LLVM");
+       llvm::InitializeAllTargetInfos();
+       llvm::InitializeAllTargetMCs();
+       llvm::InitializeAllAsmParsers();
+       llvm::InitializeAllDisassemblers();
 
-    QApplication app(argc, argv);
+       LOG4CXX_DEBUG(_logger, "Initializing Qt");
 
-    Mainwindow m;
-    m.show();
+       std::string filename = "";
+#ifdef ARGPARSE
+       if (! parser.positionalArguments().isEmpty()) {
+               filename = parser.positionalArguments().at(0).toStdString();
+       }
+#endif
 
-    return app.exec();
+       Mainwindow m(&iman);
+       m.show();
+       iman.reset(filename);
+       return app.exec();
 }