From be52353bd6781be33ddcd5a665f94c2b3a01908c Mon Sep 17 00:00:00 2001 From: fly_1997 Date: Mon, 24 Mar 2025 23:15:11 +0800 Subject: [PATCH] add analysis args check --- src/client/analysis/analysis_cli.cpp | 1 + src/client/analysis/analysis_report.cpp | 3 +++ src/client/analysis/config.cpp | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/client/analysis/analysis_cli.cpp b/src/client/analysis/analysis_cli.cpp index 47736a6..6497da6 100644 --- a/src/client/analysis/analysis_cli.cpp +++ b/src/client/analysis/analysis_cli.cpp @@ -65,6 +65,7 @@ void AnalysisCli::Run() { auto &analysisReport = oeaware::AnalysisReport::GetInstance(); analysisReport.Init(std::vector{MEMORY_ANALYSIS}, config); + std::cout << "Analyzing... Please wait " << analysisTime << "s.\n"; sleep(analysisTime); analysisReport.AnalyzeResult(); analysisReport.Print(); diff --git a/src/client/analysis/analysis_report.cpp b/src/client/analysis/analysis_report.cpp index 801a81e..3f5c92e 100644 --- a/src/client/analysis/analysis_report.cpp +++ b/src/client/analysis/analysis_report.cpp @@ -67,6 +67,9 @@ void AnalysisReport::MemoryAnalyze() memoryTable.SetColumnWidth(DEFAULT_SUGGESTION_WIDTH); const TlbMiss &tlbMiss = tlbMissAnalysis.tlbMiss; int cnt = tlbMissAnalysis.cnt; + if (cnt == 0) { + cnt = 1; + } double l1dTlbMiss = tlbMiss.l1dTlbMiss * PERCENT / cnt; double l1iTlbMiss = tlbMiss.l1iTlbMiss * PERCENT / cnt; double l2dTlbMiss = tlbMiss.l2dTlbMiss * PERCENT / cnt; diff --git a/src/client/analysis/config.cpp b/src/client/analysis/config.cpp index 5760b91..ca4407f 100644 --- a/src/client/analysis/config.cpp +++ b/src/client/analysis/config.cpp @@ -11,6 +11,8 @@ ******************************************************************************/ #include "config.h" +#include + void Config::PrintHelp() { std::string usage = ""; @@ -40,6 +42,12 @@ bool Config::ParseTime(const char *arg) return true; } +static bool IsNum(const std::string &s) +{ + std::regex num(R"(^[+]?\d+(\.\d+)?$)"); + return std::regex_match(s, num); +} + bool Config::Init(int argc, char **argv) { if (argv == nullptr) { @@ -61,9 +69,19 @@ bool Config::Init(int argc, char **argv) showVerbose = true; break; case L1_MISS_THRESHOLD: + if (!IsNum(optarg)) { + std::cerr << "Error: Invalid l1-miss-threshold: '" << optarg << "'\n"; + PrintHelp(); + return false; + } l1MissThreshold = atof(optarg); break; case L2_MISS_THRESHOLD: + if (!IsNum(optarg)) { + std::cerr << "Error: Invalid l2-miss-threshold: '" << optarg << "'\n"; + PrintHelp(); + return false; + } l2MissThreshold = atof(optarg); break; case 'h': -- 2.33.0