HarmonyOS 鸿蒙Next中Signal:SIGBUS(BUS_ADRALN)

HarmonyOS 鸿蒙Next中Signal:SIGBUS(BUS_ADRALN) 同样的代码,系统升级到6.0.0.125后就出现了闪退问题:

Reason:Signal:SIGBUS(BUS_ADRALN)@0x0000000000000001

Fault thread info:

Tid:16769, Name:OS_NET_HttpWork

#00 pc 0000000000000001 Not mapped

#01 pc 00000000001dfed4 /system/lib/ld-musl-aarch64.so.1(signal_chain_handler+920)(f83970fe414a8a0eaeb706794b1b2f7b)

#02 pc 0000000000001cc4 [shmm]

#03 pc 0000000000001468 [shmm]

#04 pc 000000000019a830 /system/lib/ld-musl-aarch64.so.1(send+80)(f83970fe414a8a0eaeb706794b1b2f7b)

#05 pc 00000000000ae408 /system/lib64/libclang_rt.asan.so(__interceptor_send+96)(af13dbc394aa03988359b6d80a47334c0e6b60d4)

#06 pc 0000000000114890 /system/lib64/platformsdk/libcurl_shared_http3.z.so(cf_socket_send+112)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#07 pc 00000000001a6ba0 /system/lib64/platformsdk/libcurl_shared_http3.z.so(ossl_bio_cf_out_write+100)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#08 pc 00000000002712b4 /system/lib64/platformsdk/libcurl_shared_http3.z.so(bssl::ssl_write_buffer_flush(ssl_st*)+216)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#09 pc 000000000026d2c8 /system/lib64/platformsdk/libcurl_shared_http3.z.so(bssl::do_tls_write(ssl_st*, int, unsigned char const*, unsigned int)+736)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#10 pc 000000000026d7fc /system/lib64/platformsdk/libcurl_shared_http3.z.so(bssl::tls_dispatch_alert(ssl_st*)+148)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#11 pc 000000000027c6dc /system/lib64/platformsdk/libcurl_shared_http3.z.so(SSL_shutdown+284)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#12 pc 00000000001a51f0 /system/lib64/platformsdk/libcurl_shared_http3.z.so(ossl_close+736)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#13 pc 00000000001a90d0 /system/lib64/platformsdk/libcurl_shared_http3.z.so(ssl_cf_close+68)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#14 pc 000000000011ae20 /system/lib64/platformsdk/libcurl_shared_http3.z.so(cf_setup_close+76)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#15 pc 0000000000112f58 /system/lib64/platformsdk/libcurl_shared_http3.z.so(cf_hc_close+80)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#16 pc 000000000018a550 /system/lib64/platformsdk/libcurl_shared_http3.z.so(Curl_disconnect+360)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#17 pc 000000000018d0d0 /system/lib64/platformsdk/libcurl_shared_http3.z.so(create_conn.llvm.3048816147090035391+8772)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#18 pc 000000000018ac8c /system/lib64/platformsdk/libcurl_shared_http3.z.so(Curl_connect+84)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#19 pc 0000000000163c80 /system/lib64/platformsdk/libcurl_shared_http3.z.so(multi_runsingle+796)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#20 pc 000000000016633c /system/lib64/platformsdk/libcurl_shared_http3.z.so(curl_multi_socket_action+508)(5aa6f09c7df9ffe447e2a3fc61c98a20)

#21 pc 000000000006fbb8 /system/lib64/module/net/libhttp.z.so(a05461f0e282715e364f882c3a2fd647)

#22 pc 00000000001d0858 /system/lib/ld-musl-aarch64.so.1(start+240)(f83970fe414a8a0eaeb706794b1b2f7b)

求解决🙏


更多关于HarmonyOS 鸿蒙Next中Signal:SIGBUS(BUS_ADRALN)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

开发者您好,请您提供如下信息:

请问是启动时闪退还是启动后在某些场景闪退,如果是启动后闪退,请提供hilog日志信息(您以上提供的是cppcrash日志)。

更多关于HarmonyOS 鸿蒙Next中Signal:SIGBUS(BUS_ADRALN)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

经排查,是以下代码造成的:

// @keepTs
// @ts-nocheck
export declare class ChannelMediaOptions {
    publishCameraTrack?: boolean;
    publishSecondaryCameraTrack?: boolean;
    publishMicrophoneTrack?: boolean;
    publishScreenCaptureVideo?: boolean;
    publishScreenCaptureAudio?: boolean;
    publishCustomAudioTrack?: boolean;
    publishCustomAudioTrackId?: number;
    publishCustomVideoTrack?: boolean;
    publishEncodedVideoTrack?: boolean;
    publishMediaPlayerAudioTrack?: boolean;
    publishMediaPlayerVideoTrack?: boolean;
    publishTranscodedVideoTrack?: boolean;
    publishMixedAudioTrack?: boolean;
    autoSubscribeAudio?: boolean;
    autoSubscribeVideo?: boolean;
    enableAudioRecordingOrPlayout?: boolean;
    publishMediaPlayerId?: number;
    clientRoleType?: number;
    audienceLatencyLevel?: number;
    defaultVideoStreamType?: number;
    channelProfile?: number;
    audioDelayMs?: number;
    mediaPlayerAudioDelayMs?: number;
    token?: string;
    enableBuiltInMediaEncryption?: boolean;
    publishRhythmPlayerTrack?: boolean;
    isInteractiveAudience?: boolean;
    customVideoTrackId?: number;
    isAudioFilterable?: boolean;
    startPreview?: boolean;
    constructor();
}

不允许关闭类型检查。

比较奇怪的是6.0.0.125版本之前表现是正常的。

Signal:SIGBUS(BUS_ADRALN) 错误通常表示进程尝试访问未对齐的内存地址。在鸿蒙Next中,这可能是由于应用访问了未按硬件要求对齐的内存区域,例如在64位系统上访问未按8字节对齐的地址。常见原因包括指针操作错误、数据结构对齐问题或直接内存访问不当。开发者需检查代码中的内存访问操作,确保地址对齐符合系统架构要求。

根据你提供的崩溃日志,这是一个典型的 SIGBUS (BUS_ADRALN) 错误,具体原因是“地址未对齐访问”。在系统升级到HarmonyOS Next 6.0.0.125后出现,表明问题很可能与系统库的变更或更严格的内存/对齐检查有关。

核心问题分析:

  1. 信号解读SIGBUS(BUS_ADRALN) 意味着你的程序试图访问一个未按照其数据类型要求进行对齐的内存地址。例如,在64位系统上,一个8字节的long long变量通常需要起始地址是8的倍数。在更严格的内核或运行库(如musl libc)中,违反此规则会直接触发崩溃,而旧版本可能容忍或静默处理。
  2. 堆栈关键点
    • #00 pc 0000000000000001 Not mapped:程序计数器指向了非法地址0x1,这通常是一个严重错误的指针值(如空指针加1后解引用)。
    • 崩溃发生在网络工作线程 OS_NET_HttpWork 中。
    • 调用链最终源于libcurl库(libcurl_shared_http3.z.so)在执行SSL关闭(SSL_shutdown)和网络发送(send)操作时,通过地址对齐检查(signal_chain_handler in ld-musl-aarch64.so.1)被捕获。

根本原因推断:

问题并非你的应用代码直接造成,而是系统底层的网络/加密库(libcurl, BoringSSL)与C运行时库(musl libc)在特定内存操作上存在不兼容。升级到6.0.0.125后,musl libc或内核可能加强了对内存对齐的检查,暴露了libcurl或SSL库中某个潜在的未对齐内存访问缺陷。

排查与解决方向:

  1. 检查第三方原生库:如果你的应用使用了任何预编译的第三方原生库(.so文件),确保它们是为ARM64架构编译,并且编译时考虑了严格的对齐要求。可以尝试更新这些库到最新版本。
  2. 验证网络操作:崩溃发生在HTTP/3的libcurl路径中。检查你的网络请求代码,确保所有与网络相关的数据结构(如自定义回调中使用的结构体)在内存中正确对齐。避免在栈上或手动分配的内存中传递非对齐数据给libcurl回调。
  3. 关注系统更新:此问题很可能是一个已知的系统库Bug。关注HarmonyOS Next的后续版本更新说明,看是否有修复类似SIGBUS问题的补丁。
  4. 简化复现:尝试创建一个最简化的网络请求示例(例如,仅进行简单的HTTPS GET请求),看是否仍会崩溃。这有助于确认问题是普遍存在于所有网络操作,还是与特定请求参数或数据处理相关。

由于问题根因在系统库交互层面,应用层能做的直接修改有限。建议重点排查第三方原生库的兼容性,并简化网络代码以隔离问题。

回到顶部