From f6d45821cd586de6ebc1030a4b88cb33d226fb90 Mon Sep 17 00:00:00 2001 From: Bensong Liu <bensl@microsoft.com> Date: Tue, 28 Jul 2020 14:24:53 +0800 Subject: [PATCH] add some debug logic in main --- src/main.cc | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main.cc b/src/main.cc index bced5e9..dd18404 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,18 +1,26 @@ #include <rlib/stdio.hpp> #include <rlib/opt.hpp> +#include <rlib/sys/os.hpp> #include "common.hpp" rlib::logger rlog(std::cerr); - using namespace rlib::literals; -int main(int argc, char **argv) { +#if RLIB_OS_ID == OS_WINDOWS + #include <thread> + using namespace std::chrono_literals; + #define windows_main main +#else + #define real_main main +#endif + +int real_main(int argc, char **argv) { rlib::opt_parser args(argc, argv); if(args.getBoolArg("--help", "-h")) { - rlib::println("Usage: {} -i $InboundConfig -o $OutboundConfig [--log=error/info/verbose/debug]"_rs.format(args.getSelf())); - rlib::println(" InboundConfig and OutboundConfig are in this format: "); - rlib::println(" '$method:$params', available methods: "); - rlib::println(" 'plain:$addr:$port', 'misc:$addr:$portRange:$psk'"); + rlog.info("Usage: {} -i $InboundConfig -o $OutboundConfig [--log=error/info/verbose/debug]"_rs.format(args.getSelf())); + rlog.info(" InboundConfig and OutboundConfig are in this format: "); + rlog.info(" '$method:$params', available methods: "); + rlog.info(" 'plain:$addr:$port', 'misc:$addr:$portRange:$psk'"); return 0; } auto inboundConfig = args.getValueArg("-i"); @@ -34,3 +42,18 @@ int main(int argc, char **argv) { return 0; } + +// This wrapper (maybe) makes debug easier. +int windows_main(int argc, char** argv) { + // fucking windows behaves strangely on exception. + // Let's catch all exceptions and print. + try { + return real_main(argc, argv); + } + catch (std::exception& e) { + rlog.fatal(e.what()); + rlog.warning("Sleep 5s before exit..."); + std::this_thread::sleep_for(5s); + return 2; + } +} -- GitLab