From 2803fd4fd3f850fcc80032fd48eadcab03d48ed2 Mon Sep 17 00:00:00 2001 From: xlgitee Date: Mon, 8 Sep 2025 12:14:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E6=94=B9coredump=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=BB=93=E6=9D=9F=EF=BC=8C=E7=9B=B4=E6=8E=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?exit=E9=80=80=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xlgitee Change-Id: I8742bb8eea79dd322184944289d92b08e5375634 --- interfaces/common/dfx_dump_res.h | 2 ++ .../coredump/coredump_manager_service.cpp | 1 + .../coredump/dfx_coredump_writer_test.cpp | 22 +++++++++++++++++++ .../coredump/coredump_dump_generator.cpp | 1 - .../coredump/coredump_note_segment_writer.cpp | 1 - .../coredump/coredump_note_segment_writer.h | 4 ++-- tools/process_dump/process_dumper.cpp | 5 +++++ 7 files changed, 32 insertions(+), 4 deletions(-) diff --git a/interfaces/common/dfx_dump_res.h b/interfaces/common/dfx_dump_res.h index 6d63f9959..c42b3cef6 100644 --- a/interfaces/common/dfx_dump_res.h +++ b/interfaces/common/dfx_dump_res.h @@ -74,6 +74,8 @@ enum DumpErrorCode : int32_t { DUMP_ESYMBOL_NO_PARSE, /** parse symbol timeout */ DUMP_ESYMBOL_PARSE_TIMEOUT, + /** coredump flow just exit*/ + DUMP_COREDUMP, }; class DfxDumpRes { diff --git a/services/coredump/coredump_manager_service.cpp b/services/coredump/coredump_manager_service.cpp index c61155a38..22134c115 100644 --- a/services/coredump/coredump_manager_service.cpp +++ b/services/coredump/coredump_manager_service.cpp @@ -178,6 +178,7 @@ bool FaultCoredumpConfig::Parse(const std::string& jsonText) cJSON_Delete(root); return false; } + uids.clear(); cJSON* uid = nullptr; cJSON_ArrayForEach(uid, whitelistArray) { diff --git a/test/unittest/coredump/dfx_coredump_writer_test.cpp b/test/unittest/coredump/dfx_coredump_writer_test.cpp index 157072728..fa56e3355 100644 --- a/test/unittest/coredump/dfx_coredump_writer_test.cpp +++ b/test/unittest/coredump/dfx_coredump_writer_test.cpp @@ -228,22 +228,44 @@ HWTEST_F(DfxCoreDumpWriterTest, ThreadNoteWriter001, TestSize.Level2) ret = writer.ArmPacMaskWrite(getpid()); EXPECT_FALSE(ret); + bw.capacity_ = 1; + bw.Reset(); + ret = writer.PrstatusWrite(getpid()); + EXPECT_FALSE(ret); + bw.capacity_ = sizeof(prstatus_t) + 1; bw.Reset(); ret = writer.PrstatusWrite(getpid()); EXPECT_FALSE(ret); + bw.capacity_ = 1; + bw.Reset(); + ret = writer.FpregsetWrite(getpid()); + EXPECT_FALSE(ret); + bw.capacity_ = sizeof(user_fpsimd_struct) + 1; bw.Reset(); ret = writer.FpregsetWrite(getpid()); EXPECT_FALSE(ret); + bw.capacity_ = 1; + bw.Reset(); + writer.SiginfoWrite(getpid()); + EXPECT_FALSE(ret); + bw.capacity_ = sizeof(siginfo_t) + 1; bw.Reset(); writer.SiginfoWrite(getpid()); EXPECT_FALSE(ret); + bw.capacity_ = 1; + bw.Reset(); + writer.ArmTaggedAddrCtrlWrite(); + + bw.capacity_ = sizeof(NT_ARM_TAGGED_ADDR_CTRL) + 1; + bw.Reset(); writer.ArmTaggedAddrCtrlWrite(); + GTEST_LOG_(INFO) << "ThreadNoteWriter001: end."; } diff --git a/tools/process_dump/coredump/coredump_dump_generator.cpp b/tools/process_dump/coredump/coredump_dump_generator.cpp index 3f2399728..47f0a53d6 100644 --- a/tools/process_dump/coredump/coredump_dump_generator.cpp +++ b/tools/process_dump/coredump/coredump_dump_generator.cpp @@ -62,7 +62,6 @@ void CoredumpGenerator::FinishCoredump(bool ret) if (CoredumpController::IsHwasanCoredumpEnabled()) { DumpUtils::InfoCrashUnwindResult(request_, true); } - exit(0); } bool CoredumpGenerator::MmapCoredumpFile() diff --git a/tools/process_dump/coredump/coredump_note_segment_writer.cpp b/tools/process_dump/coredump/coredump_note_segment_writer.cpp index 847d0e177..53a60dc5c 100644 --- a/tools/process_dump/coredump/coredump_note_segment_writer.cpp +++ b/tools/process_dump/coredump/coredump_note_segment_writer.cpp @@ -209,7 +209,6 @@ bool ThreadNoteWriter::GetPrStatus(prstatus_t &ntPrstatus, pid_t tid) return true; } - bool ThreadNoteWriter::GetRusage(prstatus_t &ntPrstatus) { struct rusage selfUsage; diff --git a/tools/process_dump/coredump/coredump_note_segment_writer.h b/tools/process_dump/coredump/coredump_note_segment_writer.h index d43b734a7..761ecff55 100644 --- a/tools/process_dump/coredump/coredump_note_segment_writer.h +++ b/tools/process_dump/coredump/coredump_note_segment_writer.h @@ -161,9 +161,9 @@ private: * --------------- * | PT_NOTE | * --------------- - * | NT_PRSTATUS | // process status (registers, etc.) + * | NT_PRPSINFO | // process info (pid, ppid, name, etc.) * --------------- - * | ........... | // thread register .. + * | ........... | // dump each thread core info , detail see ThreadNoteWriter * --------------- * | NT_AUXV | // Auxiliary vector * -------------- diff --git a/tools/process_dump/process_dumper.cpp b/tools/process_dump/process_dumper.cpp index a8a5fcb69..3f6748280 100644 --- a/tools/process_dump/process_dumper.cpp +++ b/tools/process_dump/process_dumper.cpp @@ -194,6 +194,9 @@ void ProcessDumper::Dump() { startTime_ = GetTimeMillisec(); int resDump = DumpProcess(); + if (resDump == DumpErrorCode::DUMP_COREDUMP) { + return; + } FormatJsonInfoIfNeed(); WriteDumpResIfNeed(resDump); finishTime_ = GetTimeMillisec(); @@ -499,6 +502,8 @@ bool ProcessDumper::InitUnwinder(int &dumpRes) #if defined(__aarch64__) && !defined(is_ohos_lite) if (coredumpManager_) { coredumpManager_->DumpMemoryForPid(vmPid); + dumpRes = DumpErrorCode::DUMP_COREDUMP; + return false; // coredump flow end } #endif process_->SetVmPid(vmPid); -- Gitee