diff --git a/include/subcommand_record.h b/include/subcommand_record.h index 9374132a2b4910b2d2531ac481b9c1d5fb35ed1d..35f06d2edffd651f85d81f42e7726543cae94820 100644 --- a/include/subcommand_record.h +++ b/include/subcommand_record.h @@ -254,6 +254,7 @@ private: std::vector selectCpus_ = {}; std::vector selectPids_ = {}; std::vector selectTids_ = {}; + std::vector inputPidTidArgs_ = {}; bool restart_ = false; std::vector selectEvents_ = {}; std::vector> selectGroups_ = {}; diff --git a/include/subcommand_stat.h b/include/subcommand_stat.h index 27a7f3993d4a10b92f045743d1fba1dd97244627..c961291d09122bd8708d02193ea5cbcd91078839 100644 --- a/include/subcommand_stat.h +++ b/include/subcommand_stat.h @@ -112,6 +112,7 @@ private: int checkAppMs_ = DEFAULT_CHECK_APP_MS; std::vector selectPids_; std::vector selectTids_; + std::vector inputPidTidArgs_ = {}; bool perCpus_ {false}; bool perThreads_ {false}; bool verboseReport_ {false}; diff --git a/src/subcommand_record.cpp b/src/subcommand_record.cpp index e0b4fa7b473a9eb30e4adda742babeba74fe60a1..83b290ed49e459dc6deecd88b47e4e007d80dc2e 100644 --- a/src/subcommand_record.cpp +++ b/src/subcommand_record.cpp @@ -287,12 +287,11 @@ bool SubCommandRecord::GetOptions(std::vector &args) if (!Option::GetOptionValue(args, "-p", selectPids_)) { return false; } - if (allowIpc_ && !IsExistDebugByPid(selectPids_, err)) { - return false; - } + inputPidTidArgs_ = selectPids_; if (!Option::GetOptionValue(args, "-t", selectTids_)) { return false; } + inputPidTidArgs_.insert(inputPidTidArgs_.end(), selectTids_.begin(), selectTids_.end()); if (!Option::GetOptionValue(args, "-e", selectEvents_)) { return false; } @@ -536,6 +535,10 @@ bool SubCommandRecord::CheckOptions() if (!CheckTargetProcessOptions()) { return false; } + std::string err = ""; + if (allowIpc_ && !IsExistDebugByPid(inputPidTidArgs_, err)) { + return false; + } if (!CheckReportOption()) { return false; } @@ -2170,11 +2173,14 @@ bool SubCommandRecord::OnlineReportData() std::string SubCommandRecord::HandleAppInfo() { std::string err = ""; - if (!IsExistDebugByApp(appPackage_, err)) { - return err; - } - if (!IsExistDebugByPid(selectPids_, err)) { - return err; + if (!appPackage_.empty()) { + if (!IsExistDebugByApp(appPackage_, err)) { + return err; + } + } else { + if (!IsExistDebugByPid(inputPidTidArgs_, err)) { + return err; + } } return err; } diff --git a/src/subcommand_stat.cpp b/src/subcommand_stat.cpp index 0dffbae5d792f246fddca8dc4e1fbc1635a8ee79..a0292adb599339955990ae5ee1f16acf54ec1e56 100644 --- a/src/subcommand_stat.cpp +++ b/src/subcommand_stat.cpp @@ -110,13 +110,12 @@ bool SubCommandStat::ParseOption(std::vector &args) HLOGD("get option -p failed"); return false; } - if (!IsExistDebugByPid(selectPids_, err)) { - return false; - } + inputPidTidArgs_ = selectPids_; if (!Option::GetOptionValue(args, "-t", selectTids_)) { HLOGD("get option -t failed"); return false; } + inputPidTidArgs_.insert(inputPidTidArgs_.end(), selectTids_.begin(), selectTids_.end()); if (!Option::GetOptionValue(args, "--restart", restart_)) { HLOGD("get option --restart failed"); return false; @@ -675,6 +674,10 @@ HiperfError SubCommandStat::OnSubCommand(std::vector& args) HLOGV("CheckOptionPidAndApp() failed"); return HiperfError::CHECK_OPTION_PID_APP_FAIL; } + std::string err = ""; + if (!IsExistDebugByPid(inputPidTidArgs_, err)) { + return HiperfError::CHECK_OPTION_PID_APP_FAIL; + } SetPerfEvent(); if (!PrepairEvents()) { HLOGV("PrepairEvents() failed");