HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃
HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃 目前一点代码没有,仅有 XComponent 代码,直接崩溃。
ArkTS 侧:
XComponent({
id: "test1",
type: XComponentType.SURFACE,
libraryname: "honey_napi",
})
.width("100%")
.height("100%")
C++ 侧:
void onSurfaceCreatedCB(OH_NativeXComponent *component, void *window) {
OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "test", "FUCK!: Surface created");
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports) {
napi_value exportInstance = nullptr;
if (napi_get_named_property(env, exports, OH_NATIVE_XCOMPONENT_OBJ, &exportInstance) != napi_ok) {
OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: napi_get_named_property fail");
}
OH_NativeXComponent* nativeXComponent = nullptr;
if (napi_unwrap(env, exportInstance, reinterpret_cast<void**>(&nativeXComponent)) != napi_ok) {
OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: napi_unwrap fail");
return exports;
}
char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {'\0'};
uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
if (OH_NativeXComponent_GetXComponentId(nativeXComponent, idStr, &idSize) != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: OH_NativeXComponent_GetXComponentId fail");
return exports;
}
OH_NativeXComponent_Callback callback;
callback.OnSurfaceCreated = onSurfaceCreatedCB;
OH_NativeXComponent_RegisterCallback(nativeXComponent, &callback);
return exports;
}
EXTERN_C_END
static napi_module honey_napi_module = {
.nm_version = 1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = Init,
.nm_modname = "honey_napi",
.nm_priv = ((void*)0),
.reserved = { 0 },
};
extern "C" __attribute__((constructor)) void RegisterEntryModule(void) {
napi_module_register(&honey_napi_module);
}
其中我测试过在 Init 方法中最后一个 return 前插入过输出 log 的代码,有输出内容,说明回调被注册成功了。
同时我在 ArkTS ui 侧做了刚打开应用时不显示 XComponent,点击按钮再显示,显示后崩溃,说明就是在调取回调时出现的问题。
这是触发回调后从显示 XComponent 开始的日志(其中提示找不到 libfwmark_client.z.so 库,我检查了 sdk,sdk 中并没有提供这个库,在互联网上搜索也只能查找到在 分析资源泄露中此章节的示例二 中以示例内容出现过):
INFO [(100000:100000:scope)] XComponent[test1] triggers onLoad and OnSurfaceCreated callback
INFO [(native_module_manager.cpp:605)(LoadNativeModule)] key is default/honey_napi
ERROR Error loading header libfwmark_client.z.so, namespace ndk has no inherits, errno=2
ERROR Error loading header: can't find library libfwmark_client.z.so in namespace: moduleNs_default
ERROR dlopen_impl load library header failed for libfwmark_client.z.so
INFO [(native_module_manager.cpp:297)(Register)] At tail register module name is 'default/honey_napi', isAppModule is 1
INFO [(100000:100000:scope)] XComponent[test1] native OnSurfaceCreated
ERROR signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=55259 thread_list_lock_pre_unlock=55276 thread_list_lock_pthread_exit=55259 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0
INFO DFX_SigchainHandler :: sig(11), pid(55185), tid(55185).
INFO g_GetStackIdFunc 0000000000000000.
INFO DFX_SigchainHandler :: sig(11), pid(55185), processName(org.rohy.honey), threadName(org.rohy.honey).
INFO start wait processdump read registers
INFO processdump have get all registers .
INFO start wait processdump unwind
WARN WriteBinder 209: ioctl_binder returned EINTR time:760775372007164
WARN SendObituary 529: handle:27 desc:*.IWindowEventChannel 2821739328
ERROR [] OnRemoteDied(121): ChannelDeathRecipient OnRemoteDied
INFO [] ~ExtensionSession(134): realease extension session
INFO [] ~Session(107): id:1299779586
INFO ThreadHandler 124: proto:0 policy:0 name:OS_IPC_4_55672 invoker:2765884032
INFO ThreadHandler 124: proto:0 policy:0 name:OS_IPC_5_55673 invoker:2821859968
WARN WriteBinder 209: ioctl_binder returned EINTR time:760775374875914
WARN WriteBinder 209: ioctl_binder returned EINTR time:760775377174873
WARN WriteBinder 209: ioctl_binder returned EINTR time:760775412433206
INFO processdump unwind finish
INFO process dump end
INFO Finish handle signal(11) in 55185:55185
ERROR signal_chain_handler call usr sigaction for signal: 11 sig_action.sa_sigaction=5b978ea478
ERROR signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=55672 thread_list_lock_pre_unlock=55672 thread_list_lock_pthread_exit=55259 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0
INFO DFX_SigchainHandler :: sig(11), pid(55185), tid(55185).
ERROR signal_chain_handler SIG_DFL handler for signal: 11
ERROR pid(55185) rethrow sig(11) success.
这是 FaultLog 中错误线程的日志:
Device info:HUAWEI Mate 60 Pro
Build info:ALN-AL00 5.0.0.123(SP19C00E121R4P25)
Fingerprint:455f3d321ccc095daf820ab34c819fdfebe0954e4f8ba5d031964e79805fdde8
Module name:org.rohy.honey
Version:1.0.0
VersionCode:1000000
PreInstalled:No
Foreground:Yes
Timestamp:2025-02-08 16:28:29.298
Pid:42999
Uid:20020276
Process name:org.rohy.honey
Process life time:21s
Reason:Signal:SIGSEGV(SEGV_MAPERR)@0xffffff80ffffffe8
Fault thread info:
Tid:42999, Name:org.rohy.honey
#00 pc ffffff80ffffffe8 Not mapped
#01 pc 0000000000e0c628 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::OnSurfaceCreated()+484)(1d8ede554f62f4eb2bc7fb522193bea8)
#02 pc 0000000002b4cf00 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#03 pc 0000000000a31c84 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::TaskExecutor::PostSyncTask(std::__h::function<void ()>&&, OHOS::Ace::TaskExecutor::TaskType, std::__h::basic_string<char, std::__h::char_traits<char>, std::__h::allocator<char>> const&, OHOS::Ace::PriorityType) const+120)(1d8ede554f62f4eb2bc7fb522193bea8)
#04 pc 0000000000bd4950 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::TaskExecutor::PostSyncTask(std::__h::function<void ()> const&, OHOS::Ace::TaskExecutor::TaskType, std::__h::basic_string<char, std::__h::char_traits<char>, std::__h::allocator<char>> const&) const+108)(1d8ede554f62f4eb2bc7fb522193bea8)
#05 pc 0000000000c2dec0 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::Framework::JsiDeclarativeEngine::FireExternalEvent(std::__h::basic_string<char, std::__h::char_traits<char>, std::__h::allocator<char>> const&, unsigned int, bool)+1072)(1d8ede554f62f4eb2bc7fb522193bea8)
#06 pc 0000000000d2155c /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::FireExternalEvent(OHOS::Ace::RefPtr<OHOS::Ace::NG::PipelineContext>, std::__h::basic_string<char, std::__h::char_traits<char>, std::__h::allocator<char>> const&, unsigned int, bool)+220)(1d8ede554f62f4eb2bc7fb522193bea8)
#07 pc 00000000023f34a0 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#08 pc 0000000000bb5234 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::XComponentSizeInit()+424)(1d8ede554f62f4eb2bc7fb522193bea8)
#09 pc 0000000000bb45f4 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::BeforeSyncGeometryProperties(OHOS::Ace::NG::DirtySwapConfig const&)+512)(1d8ede554f62f4eb2bc7fb522193bea8)
#10 pc 000000000086bf98 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::FrameNode::SyncGeometryNode(bool, OHOS::Ace::NG::DirtySwapConfig const&)+644)(1d8ede554f62f4eb2bc7fb522193bea8)
#11 pc 00000000018af5c4 /system/lib64/platformsdk/libace_compatible.z.so(std::__h::__function::__func<OHOS::Ace::NG::FrameNode::Layout()::$_9, std::__h::allocator<OHOS::Ace::NG::FrameNode::Layout()::$_9>, void ()>::operator()() (.4bf03a507cf0728840f4ffbe7f64413a)+72)(1d8ede554f62f4eb2bc7fb522193bea8)
#12 pc 00000000007cd240 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::UITaskScheduler::FlushLayoutTask(bool)+4716)(1d8ede554f62f4eb2bc7fb522193bea8)
#13 pc 0000000000d112cc /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::UITaskScheduler::FlushTask()+320)(1d8ede554f62f4eb2bc7fb522193bea8)
#14 pc 000000000120fba0 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::PipelineContext::FlushVsync(unsigned long, unsigned int)+832)(1d8ede554f62f4eb2bc7fb522193bea8)
#15 pc 0000000000d69434 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#16 pc 000000000080c5cc /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#17 pc 00000000000e5508 /system/lib64/libwm.z.so(OHOS::Rosen::VsyncStation::VsyncCallbackInner(long, long)+712)(4cae642efb84cf33fa6c1ec096792a54)
#18 pc 00000000000e51a4 /system/lib64/libwm.z.so(4cae642efb84cf33fa6c1ec096792a54)
#19 pc 0000000000024c50 /system/lib64/libvsync.z.so(OHOS::Rosen::VSyncCallBackListener::HandleVsyncCallbacks(long*, long, int)+688)(e6e249e3de38c12a09001fb1c2b2524d)
#20 pc 00000000000247a4 /system/lib64/libvsync.z.so(OHOS::Rosen::VSyncCallBackListener::OnReadable(int)+208)(e6e249e3de38c12a09001fb1c2b2524d)
#21 pc 0000000000020430 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(7624595d16175e81cbcad4bae2f376ca)
#22 pc 000000000001bdb4 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventHandler::DistributeEvent(std::__h::unique_ptr<OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)> const&)+1140)(7624595d16175e81cbcad4bae2f376ca)
#23 pc 000000000002d690 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::(anonymous namespace)::EventRunnerImpl::ExecuteEventHandler(std::__h::unique_ptr<OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)>&)+348)(7624595d16175e81cbcad4bae2f376ca)
#24 pc 000000000002cf4c /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::(anonymous namespace)::EventRunnerImpl::Run()+908)(7624595d16175e81cbcad4bae2f376ca)
#25 pc 00000000000302f0 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventRunner::Run()+528)(7624595d16175e81cbcad4bae2f376ca)
#26 pc 00000000000b60d4 /system/lib64/platformsdk/libappkit_native.z.so(OHOS::AppExecFwk::MainThread::Start()+400)(5a2b27cd4dd27891765ea9c252901f11)
#27 pc 0000000000004e34 /system/lib64/appspawn/appspawn/libappspawn_ace.z.so(RunChildProcessor(AppSpawnContent*, AppSpawnClient*)+568)(d3f6e56ad6a96018b92b82ae93f9f1a7)
#28 pc 000000000000c00c /system/bin/appspawn(AppSpawnChild+576)(95900e357b85f36e3a89104a4041ae3b)
#29 pc 0000000000015ef4 /system/bin/appspawn(ProcessSpawnReqMsg+3180)(95900e357b85f36e3a89104a4041ae3b)
#30 pc 0000000000013b38 /system/bin/appspawn(OnReceiveRequest+132)(95900e357b85f36e3a89104a4041ae3b)
#31 pc 0000000000016dcc /system/lib64/chipset-pub-sdk/libbegetutil.z.so(HandleRecvMsg_+344)(6807ec574aea93e64c71ccb52611b50d)
#32 pc 00000000000168a0 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(HandleStreamEvent_+192)(6807ec574aea93e64c71ccb52611b50d)
#33 pc 0000000000013f80 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(ProcessEvent+88)(6807ec574aea93e64c71ccb52611b50d)
#34 pc 0000000000013b3c /system/lib64/chipset-pub-sdk/libbegetutil.z.so(RunLoop_+308)(6807ec574aea93e64c71ccb52611b50d)
#35 pc 0000000000011958 /system/bin/appspawn(AppSpawnRun+212)(95900e357b85f36e3a89104a4041ae3b)
#36 pc 000000000000f278 /system/bin/appspawn(main+764)(95900e357b85f36e3a89104a4041ae3b)
#37 pc 00000000000a1344 /system/lib/ld-musl-aarch64.so.1(libc_start_main_stage2+64)(e9ff207f4340aee156e36fdd8af0ab22)
Registers:
x0:0000005ba4d48638 x1:0000005ba4daa140 x2:0000005b9cfe2598 x3:0000007e0c310ad9
x4:0000000000000023 x5:0000000000000014 x6:0000000000008080 x7:feff686067666d60
x8:ffffff80ffffffe8 x9:0000005ba4daa140 x10:0000007e0c310ad9 x11:ffffffffc4653600
x12:0000000000000016 x13:0000000082355555 x14:00000000679b81c2 x15:0000000000000000
x16:0000005b9fef61c8 x17:0000005b9d60dfcc x18:ffff000000000006 x19:0000005ba4c65500
x20:0000000000000000 x21:0000007e0c310ad8 x22:0000007e0c310ad9 x23:0000007e0c310ac0
x24:0000005ba4d52b70 x25:0000005ba47ea800 x26:0000000000000000 x27:0000005ba4c65500
x28:0000005ba46d3648 x29:0000007e0c310b00
lr:0000005b9dc4c62c sp:0000007e0c310ab0 pc:ffffff80ffffffe8
更多关于HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
- 是否添加了 ace 和 hilog?
更多关于HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
经过我在空项目下进行测试,这个问题不是因为 C++ 第三方库添加太多导致的,这里是日志:
INFO [(100000:100000:scope)] XComponent[test1] triggers onLoad and OnSurfaceCreated callback
INFO [(native_module_manager.cpp:605)(LoadNativeModule)] key is default/entry
INFO [(native_module_manager.cpp:297)(Register)] At tail register module name is 'default/entry', isAppModule is 1
INFO [(100000:100000:scope)] XComponent[test1] native OnSurfaceCreated
ERROR signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=7045 thread_list_lock_pre_unlock=7045 thread_list_lock_pthread_exit=7062 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0
INFO DFX_SigchainHandler :: sig(11), pid(6633), tid(6633).
INFO g_GetStackIdFunc 0000000000000000.
INFO DFX_SigchainHandler :: sig(11), pid(6633), processName(org.rohy.myapplication), threadName(y.myapplication).
INFO start wait processdump read registers
INFO processdump have get all registers .
INFO start wait processdump unwind
WARN WriteBinder 209: ioctl_binder returned EINTR time:763070771832335
WARN WriteBinder 209: ioctl_binder returned EINTR time:763070774077647
WARN WriteBinder 209: ioctl_binder returned EINTR time:763070775881293
WARN WriteBinder 209: ioctl_binder returned EINTR time:763070811122439
INFO processdump unwind finish
INFO process dump end
INFO Finish handle signal(11) in 6633:6633
ERROR signal_chain_handler call usr sigaction for signal: 11 sig_action.sa_sigaction=5b978ea478
ERROR signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=7055 thread_list_lock_pre_unlock=7055 thread_list_lock_pthread_exit=7062 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0
INFO DFX_SigchainHandler :: sig(11), pid(6633), tid(6633).
ERROR signal_chain_handler SIG_DFL handler for signal: 11
ERROR pid(6633) rethrow sig(11) success.
同时也没有了和 libfwmark_client.z.so
相关的输出,说明 libfwmark_client.z.so
并不是导致问题的原因。
针对帖子标题“HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃”的问题,以下是专业回答:
在HarmonyOS鸿蒙系统中,XComponent作为组件化开发框架,其native侧触发回调时崩溃可能由多种原因引起。首先,需检查回调函数的实现是否存在内存访问越界、空指针引用等常见编程错误。其次,确认回调函数的参数传递是否正确,特别是指针和引用类型的数据,确保在native侧和Java/JS侧的数据类型及内存布局一致。
此外,还需关注多线程环境下的同步问题,确保在触发回调时,相关资源处于可用状态,避免数据竞争或死锁情况。同时,检查XComponent框架的版本兼容性,确保native代码与框架版本相匹配,避免因版本不一致导致的崩溃问题。
若上述检查均无异常,可进一步使用调试工具(如gdb、lldb等)对崩溃现场进行分析,定位具体崩溃原因。通过查看崩溃时的堆栈信息、寄存器状态等,可更精确地找到问题所在。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,