From 2e1dbd9e4aea97da8d16f3363f9a0f29c613db88 Mon Sep 17 00:00:00 2001 From: zhou_xq Date: Thu, 24 Jul 2025 15:23:13 +0800 Subject: [PATCH 1/4] Add abnormal scenario use cases Signed-off-by: zhou_xq --- common/dfxutil/stack_utils.cpp | 14 ---- common/dfxutil/stack_utils.h | 1 - .../process_dump/process_dump_test.cpp | 33 ++++++++- test/unittest/unwind/dwarf_test.cpp | 4 +- test/unittest/unwind/jsvm_test.cpp | 3 + test/unittest/unwind/memory_test.cpp | 68 +++++++++++++++++++ 6 files changed, 106 insertions(+), 17 deletions(-) diff --git a/common/dfxutil/stack_utils.cpp b/common/dfxutil/stack_utils.cpp index 1020e3b26..ae344333b 100644 --- a/common/dfxutil/stack_utils.cpp +++ b/common/dfxutil/stack_utils.cpp @@ -72,20 +72,6 @@ bool StackUtils::GetSelfStackRange(uintptr_t& stackBottom, uintptr_t& stackTop) return ret; } -bool StackUtils::GetSigAltStackRange(uintptr_t& stackBottom, uintptr_t& stackTop) -{ - stack_t altStack; - if (sigaltstack(nullptr, &altStack) == -1) { - return false; - } - if ((static_cast(altStack.ss_flags) & SS_ONSTACK) != 0) { - stackBottom = reinterpret_cast(altStack.ss_sp); - stackTop = reinterpret_cast(altStack.ss_sp) + altStack.ss_size; - return true; - } - return false; -} - void StackUtils::ParseSelfMaps() { std::unique_ptr fp(fopen(PROC_SELF_MAPS_PATH, "r"), [](FILE* fp) { diff --git a/common/dfxutil/stack_utils.h b/common/dfxutil/stack_utils.h index 2dd746508..2b47b4517 100644 --- a/common/dfxutil/stack_utils.h +++ b/common/dfxutil/stack_utils.h @@ -33,7 +33,6 @@ public: bool GetMainStackRange(uintptr_t& stackBottom, uintptr_t& stackTop) const; bool GetArkStackRange(uintptr_t& start, uintptr_t& end) const; static bool GetSelfStackRange(uintptr_t& stackBottom, uintptr_t& stackTop); - static bool GetSigAltStackRange(uintptr_t& stackBottom, uintptr_t& stackTop); private: struct MapRange { bool IsValid() const diff --git a/test/unittest/process_dump/process_dump_test.cpp b/test/unittest/process_dump/process_dump_test.cpp index 8f2bccfd1..918ad4d11 100644 --- a/test/unittest/process_dump/process_dump_test.cpp +++ b/test/unittest/process_dump/process_dump_test.cpp @@ -134,7 +134,7 @@ HWTEST_F (ProcessDumpTest, DfxProcessTest005, TestSize.Level2) */ HWTEST_F (ProcessDumpTest, DfxProcessTest006, TestSize.Level2) { - GTEST_LOG_(INFO) << "DfxProcessTest005: start."; + GTEST_LOG_(INFO) << "DfxProcessTest006: start."; pid_t pid = getpid(); DfxProcess process; process.InitProcessInfo(pid, pid, getuid(), ""); @@ -146,6 +146,37 @@ HWTEST_F (ProcessDumpTest, DfxProcessTest006, TestSize.Level2) GTEST_LOG_(INFO) << "DfxProcessTest006: end."; } +/** + * @tc.name: DfxProcessTest007 + * @tc.desc: test DfxProcess ChangeTid + * @tc.type: FUNC + */ +HWTEST_F (ProcessDumpTest, DfxProcessTest007, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "DfxProcessTest007: start."; + pid_t curPid = getpid(); + pid_t pid = fork(); + if (pid == 0) { + sleep(1); + } + int status = 0; + waitpid(pid, &status, WNOHANG); + DfxProcess process; + process.InitProcessInfo(curPid, pid, getuid(), ""); + pid_t id = process.ChangeTid(pid, false); + ProcessDumpRequest request = { + .type = ProcessDumpType::DUMP_TYPE_DUMP_CATCH, + .tid = pid, + .pid = pid, + .nsPid = curPid, + }; + process.InitKeyThread(request); + id = process.ChangeTid(pid, false); + ProcessDumper::GetInstance().RemoveFileIfNeed("/data/log/faultlog/temp"); + ASSERT_EQ(id, 0); + GTEST_LOG_(INFO) << "DfxProcessTest007: end."; +} + /** * @tc.name: DfxThreadTest002 * @tc.desc: test DfxThread GetThreadRegs diff --git a/test/unittest/unwind/dwarf_test.cpp b/test/unittest/unwind/dwarf_test.cpp index 68ad7dcef..35407ceaf 100644 --- a/test/unittest/unwind/dwarf_test.cpp +++ b/test/unittest/unwind/dwarf_test.cpp @@ -1234,7 +1234,9 @@ HWTEST_F(DwarfTest, DwarfCfaInstructionsTest001, TestSize.Level2) { GTEST_LOG_(INFO) << "DwarfCfaInstructionsTest001: start."; uint8_t values[] = {DW_CFA_set_loc, DW_CFA_undefined, DW_CFA_register, - DW_CFA_def_cfa_register, DW_CFA_offset_extended_sf}; + DW_CFA_def_cfa_register, DW_CFA_offset_extended_sf, DW_CFA_def_cfa_sf, + DW_CFA_def_cfa_offset_sf, DW_CFA_val_offset, DW_CFA_val_offset_sf, DW_CFA_def_cfa_expression, + DW_CFA_expression, DW_CFA_val_expression, DW_CFA_GNU_negative_offset_extended}; for (size_t i = 0; i < sizeof(values) / sizeof(uint8_t); i++) { ASSERT_EQ(DwarfDecode(values[i]), true); } diff --git a/test/unittest/unwind/jsvm_test.cpp b/test/unittest/unwind/jsvm_test.cpp index a12a5170c..93c7e395f 100644 --- a/test/unittest/unwind/jsvm_test.cpp +++ b/test/unittest/unwind/jsvm_test.cpp @@ -111,6 +111,9 @@ HWTEST_F(JsvmTest, JsvmTest003, TestSize.Level2) ReadMemFunc readMemFn = nullptr; JsvmStepParam *jsvmParam = nullptr; DfxJsvm::Instance().StepJsvmFrame(obj, readMemFn, jsvmParam); + int a = 0; + obj = &a; + DfxJsvm::Instance().StepJsvmFrame(obj, readMemFn, jsvmParam); ASSERT_EQ(DfxJsvm::Instance().stepJsvmFn_, nullptr); GTEST_LOG_(INFO) << "JsvmTest003: end."; } diff --git a/test/unittest/unwind/memory_test.cpp b/test/unittest/unwind/memory_test.cpp index 84a74f1ad..2c2ba7739 100644 --- a/test/unittest/unwind/memory_test.cpp +++ b/test/unittest/unwind/memory_test.cpp @@ -512,6 +512,7 @@ HWTEST_F(DfxMemoryTest, DfxMemoryTest014, TestSize.Level2) EXPECT_FALSE(cur); GTEST_LOG_(INFO) << "DfxMemoryTest014: end."; } + /** * @tc.name: DfxMemoryTest015 * @tc.desc: test DfxMemory class 256 Read @@ -545,6 +546,73 @@ HWTEST_F(DfxMemoryTest, DfxMemoryTest015, TestSize.Level2) ASSERT_EQ(memory->ReadSleb128(invalidAddr), 0); GTEST_LOG_(INFO) << "DfxMemoryTest015: end."; } + +/** + * @tc.name: DfxMemoryTest016 + * @tc.desc: test GetArkStackRange FUNC + * @tc.type: FUNC + */ +HWTEST_F(DfxMemoryTest, DfxMemoryTest016, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "DfxMemoryTest016: start."; + uintptr_t stackBottom; + uintptr_t stackTop; + bool ret = StackUtils::Instance().GetMainStackRange(stackBottom, stackTop); + ASSERT_TRUE(ret); + GTEST_LOG_(INFO) << "DfxMemoryTest016: end."; +} + +/** + * @tc.name: DfxMemoryTest017 + * @tc.desc: test ReadFormatEncodedValue FUNC + * @tc.type: FUNC + */ +HWTEST_F(DfxMemoryTest, DfxMemoryTest017, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "DfxMemoryTest017: start."; + uint8_t values[] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x10}; + auto memory = std::make_shared(UNWIND_TYPE_REMOTE); + uintptr_t addr = reinterpret_cast(&values[0]); + uintptr_t val; + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_uleb128); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_sleb128); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_udata1); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_sdata1); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_udata2); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_sdata2); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_udata4); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_sdata4); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_udata8); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_sdata8); + memory->ReadFormatEncodedValue(addr, val, DW_EH_PE_omit); + uint8_t formatEncoding = 0x11; + memory->ReadFormatEncodedValue(addr, val, formatEncoding); + ASSERT_EQ(val, 0); + GTEST_LOG_(INFO) << "DfxMemoryTest017: end."; +} + +/** + * @tc.name: DfxMemoryTest018 + * @tc.desc: test ReadFormatEncodedValue FUNC + * @tc.type: FUNC + */ +HWTEST_F(DfxMemoryTest, DfxMemoryTest018, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "DfxMemoryTest018: start."; + auto accessors = std::make_shared(); + DfxAccessorsCustomize acc(nullptr); + acc.AccessReg(0, nullptr, nullptr); + UnwindTableInfo uti; + acc.FindUnwindTable(0, uti, nullptr); + auto map = std::make_shared(); + acc.GetMapByPc(0, map, nullptr); + DfxAccessorsCustomize acc1(accessors); + acc1.AccessReg(0, nullptr, nullptr); + acc1.FindUnwindTable(0, uti, nullptr); + int ret = acc1.GetMapByPc(0, map, nullptr); + ASSERT_EQ(ret, -1); + GTEST_LOG_(INFO) << "DfxMemoryTest018: end."; +} } } // namespace HiviewDFX } // namespace OHOS -- Gitee From 46b710f5f7f567bdad5d03cc347d695217f1e3a1 Mon Sep 17 00:00:00 2001 From: zhou_xq Date: Thu, 24 Jul 2025 11:01:04 +0000 Subject: [PATCH 2/4] update test/unittest/process_dump/process_dump_test.cpp. Signed-off-by: zhou_xq --- test/unittest/process_dump/process_dump_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unittest/process_dump/process_dump_test.cpp b/test/unittest/process_dump/process_dump_test.cpp index 918ad4d11..1d16d5883 100644 --- a/test/unittest/process_dump/process_dump_test.cpp +++ b/test/unittest/process_dump/process_dump_test.cpp @@ -172,7 +172,6 @@ HWTEST_F (ProcessDumpTest, DfxProcessTest007, TestSize.Level2) }; process.InitKeyThread(request); id = process.ChangeTid(pid, false); - ProcessDumper::GetInstance().RemoveFileIfNeed("/data/log/faultlog/temp"); ASSERT_EQ(id, 0); GTEST_LOG_(INFO) << "DfxProcessTest007: end."; } -- Gitee From a8f987c2e4aebf6a94ec8813fc506f1c78c52f92 Mon Sep 17 00:00:00 2001 From: zhou_xq Date: Thu, 24 Jul 2025 11:46:12 +0000 Subject: [PATCH 3/4] update test/unittest/process_dump/process_dump_test.cpp. Signed-off-by: zhou_xq --- test/unittest/process_dump/process_dump_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittest/process_dump/process_dump_test.cpp b/test/unittest/process_dump/process_dump_test.cpp index 1d16d5883..403ed327b 100644 --- a/test/unittest/process_dump/process_dump_test.cpp +++ b/test/unittest/process_dump/process_dump_test.cpp @@ -158,6 +158,7 @@ HWTEST_F (ProcessDumpTest, DfxProcessTest007, TestSize.Level2) pid_t pid = fork(); if (pid == 0) { sleep(1); + _exit(0); } int status = 0; waitpid(pid, &status, WNOHANG); -- Gitee From 5b72aaf4aa291a6bcd4b01e57f3c88f2d5efecc3 Mon Sep 17 00:00:00 2001 From: zhou_xq Date: Fri, 25 Jul 2025 02:59:00 +0000 Subject: [PATCH 4/4] update test/unittest/process_dump/process_dump_test.cpp. Signed-off-by: zhou_xq --- test/unittest/process_dump/process_dump_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/process_dump/process_dump_test.cpp b/test/unittest/process_dump/process_dump_test.cpp index 403ed327b..1f7149378 100644 --- a/test/unittest/process_dump/process_dump_test.cpp +++ b/test/unittest/process_dump/process_dump_test.cpp @@ -173,7 +173,7 @@ HWTEST_F (ProcessDumpTest, DfxProcessTest007, TestSize.Level2) }; process.InitKeyThread(request); id = process.ChangeTid(pid, false); - ASSERT_EQ(id, 0); + ASSERT_NE(id, 0); GTEST_LOG_(INFO) << "DfxProcessTest007: end."; } -- Gitee