| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #if (defined _WIN32 || defined _WIN64)
- #include "stdafx.h"
- #endif
- #include "baseEx.h"
- #include <thread>
- #include <boost/xpressive/xpressive_dynamic.hpp>
- #include <boost/algorithm/string.hpp>
- #include <boost/filesystem.hpp>
- #include <chrono>
- #include <signal.h> // ::signal, ::raise
- #include <boost/stacktrace.hpp>
- #include "CModTools.h"
- #include "CWebsocketServer.h"
- std::string g_backtracePath = "";
- void seg_signal_handler(int signum)
- {
- //boost::stacktrace::safe_dump_to(g_backtracePath.c_str());
- Dbg("receive signal:%d, seg_signal_handler", signum);
- auto dumpArr = boost::stacktrace::stacktrace().as_vector();
- for (auto i = 0; i < dumpArr.size(); i++)
- Dbg("SEG[%d]%X---%s(%s-%d)", i, dumpArr[i].address(), dumpArr[i].name().c_str(), dumpArr[i].source_file().c_str(), dumpArr[i].source_line());
- Chromium::CModTools::get_mutable_instance().killAllChromium();
- Chromium::CWebsocketServer::stopServer();
- signal(signum, SIG_DFL);
- raise(signum);
- }
- void normal_signal_handle(int signum)
- {
- Dbg("receive signal:%d, normal_signal_handle", signum);
- signal(signum, SIG_DFL);
- raise(signum);
- }
- void set_traceback_path(std::string path)
- {
- g_backtracePath = path + "/mod_chromium/" + generateTimeStr(true) + "_chromium_backtrace.dump";
- Dbg("set_traceback_path %s", g_backtracePath.c_str());
- }
- void DbgEx(const char* str, ...)
- {
- va_list arg;
- va_start(arg, str);
- auto modifyStr = CSimpleString::Format("<%d>--%s", std::this_thread::get_id(), str);
- vDbg(modifyStr.GetData(), arg);
- va_end(arg);
- }
- std::vector<std::string> find_files(const std::string srcPath, const std::string fileName)
- {
- static boost::xpressive::sregex_compiler rc;
- if (!rc[fileName].regex_id())
- {
- std::string str = boost::algorithm::replace_all_copy(
- boost::algorithm::replace_all_copy(fileName, ".", "\\."), "*", ".*");
- rc[fileName] = rc.compile(str);
- }
- std::vector<std::string> ret;
- if (!boost::filesystem::exists(srcPath) || !boost::filesystem::is_directory(srcPath))
- return ret;
- typedef boost::filesystem::recursive_directory_iterator rd_iterator;
- rd_iterator end;
- for(rd_iterator pos(srcPath); pos != end; ++pos)
- {
- if (!boost::filesystem::is_directory(*pos) && boost::xpressive::regex_match(pos->path().filename().string(), rc[fileName]))
- ret.push_back(pos->path().string());
- }
- return ret;
- }
- std::string generateTimeStr(bool isSimple)
- {
- auto tt = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
- struct tm* ptm = localtime(&tt);
- char date[60] = { 0 };
- if (isSimple)
- sprintf(date, "%02d%02d%02d", (int)ptm->tm_hour, (int)ptm->tm_min, (int)ptm->tm_sec);
- else
- sprintf(date, "%d-%02d-%02d-%02d:%02d:%02d", (int)ptm->tm_year + 1900, (int)ptm->tm_mon + 1, (int)ptm->tm_mday, (int)ptm->tm_hour, (int)ptm->tm_min, (int)ptm->tm_sec);
-
- return std::string(date);
- }
|