From a40365782e3e6407a982cff751a9a997ab144b53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=9D=B0=E6=9D=B0=E6=9D=B0?= Date: Thu, 19 Jun 2025 20:00:49 +0800 Subject: [PATCH] add condition for cangjie MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 吴杰杰杰 --- .../unwinder/src/elf/dfx_symbols.cpp | 3 ++- test/unittest/unwind/symbols_test.cpp | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp b/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp index a9c1c9de6..999344e80 100644 --- a/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp +++ b/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp @@ -179,7 +179,8 @@ std::string DfxSymbols::Demangle(const std::string& buf) #endif #if defined(CJ_DEMANGLE) && defined(__LP64__) - if ((buf[1] == 'C') && (demangledStr == nullptr)) { + if ((buf[0] == '_') && (buf[1] == 'C') && (buf[2] == 'N') && + (demangledStr == nullptr)) { std::lock_guard lck(g_cj_mutex); if (FindCJDemangleFunction()) { demangledStr = g_cjDemangleFn(bufStr); diff --git a/test/unittest/unwind/symbols_test.cpp b/test/unittest/unwind/symbols_test.cpp index dd4296d1d..1539084a5 100644 --- a/test/unittest/unwind/symbols_test.cpp +++ b/test/unittest/unwind/symbols_test.cpp @@ -215,8 +215,8 @@ HWTEST_F(DfxSymbolsTest, DfxDemangleTest003, TestSize.Level2) HWTEST_F(DfxSymbolsTest, DfxDemangleTest004, TestSize.Level2) { GTEST_LOG_(INFO) << "DfxDemangleTest004: start."; - std::filesystem::path runtimePath("/system/lib64/chipset-sdk/libcangjie-demangle.so"); - if (std::filesystem::exists(runtimePath)) { + std::filesystem::path demanglePath("/system/lib64/platformsdk/cjsdk/libcangjie-demangle.so"); + if (std::filesystem::exists(demanglePath)) { EXPECT_EQ("std.time.initLocalDefault()", DfxSymbols::Demangle("_CN8std.time16initLocalDefaultHv")); EXPECT_EQ("std.core.Error::init()", DfxSymbols::Demangle("_CN8std.core5Error6Hv")); @@ -228,6 +228,21 @@ HWTEST_F(DfxSymbolsTest, DfxDemangleTest004, TestSize.Level2) } GTEST_LOG_(INFO) << "DfxDemangleTest004: end."; } + +/** + * @tc.name: DfxDemangleTest005 + * @tc.desc: test DfxSymbols demangle functions with cangjie + * @tc.type: FUNC + */ +HWTEST_F(DfxSymbolsTest, DfxDemangleTest005, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "DfxDemangleTest005: start."; + EXPECT_EQ("-CNabc", DfxSymbols::Demangle("-CNabc")); + EXPECT_EQ("_Cabc", DfxSymbols::Demangle("_Cabc")); + EXPECT_EQ("_CNabc", DfxSymbols::Demangle("_CNabc")); + EXPECT_EQ("_CDabc", DfxSymbols::Demangle("_CDabc")); + GTEST_LOG_(INFO) << "DfxDemangleTest005: end."; +} } // namespace HiviewDFX } // namespace OHOS -- Gitee