diff --git a/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp b/interfaces/innerkits/unwinder/src/elf/dfx_symbols.cpp index a9c1c9de60f1e1d499573baacdd734e80465bb54..999344e80378d5215b3a8c4c9e1754d9bee4f1c8 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 dd4296d1dbf20d720985714388cd1b6f49bdc0ba..1539084a528c475ecfe0af709e5df7dbca13e6e9 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