Linphone Android调试版连接SIP账户时崩溃问题排查
Linphone Android release/5.1调试版SIP账户助手崩溃问题排查
问题描述
构建并运行Linphone Android的release/5.1版本,使用账户助手连接SIP账户时触发SIGSEGV崩溃,崩溃堆栈信息如下:
2023-06-05 11:24:54.487 12702-12702 libc org.linphone.debug A Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 12702 (.linphone.debug), pid 12702 (.linphone.debug) 2023-06-05 11:24:54.596 12904-12904 DEBUG pid-12904 A pid: 12702, tid: 12702, name: .linphone.debug >>> org.linphone.debug <<< 2023-06-05 11:24:54.806 12904-12904 DEBUG pid-12904 A #01 pc 000000000085143c /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/lib/arm64/liblinphone.so (_get_identity+96) 2023-06-05 11:24:54.806 12904-12904 DEBUG pid-12904 A #02 pc 0000000000851818 /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/lib/arm64/liblinphone.so (linphone_account_creator_create_proxy_config+60) 2023-06-05 11:24:54.806 12904-12904 DEBUG pid-12904 A #03 pc 0000000000851ad4 /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/lib/arm64/liblinphone.so (linphone_account_creator_create_account_in_core+8) 2023-06-05 11:24:54.806 12904-12904 DEBUG pid-12904 A #04 pc 00000000008085c0 /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/lib/arm64/liblinphone.so (Java_org_linphone_core_AccountCreatorImpl_createAccountInCore+24) 2023-06-05 11:24:54.806 12904-12904 DEBUG pid-12904 A #12 pc 0000000000025e6a /dev/ashmem/dalvik-classes19.dex extracted in memory from /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/base.apk!classes19.dex (deleted) (org.linphone.core.AccountCreatorImpl.createAccountInCore+6) 2023-06-05 11:24:54.807 12904-12904 DEBUG pid-12904 A #18 pc 000000000000c320 /dev/ashmem/dalvik-classes15.dex extracted in memory from /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/base.apk!classes15.dex (deleted) (org.linphone.activities.assistant.viewmodels.GenericLoginViewModel.createAccountAndAuthInfo+188) 2023-06-05 11:24:54.807 12904-12904 DEBUG pid-12904 A #24 pc 0000000000042092 /dev/ashmem/dalvik-classes7.dex extracted in memory from /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/base.apk!classes7.dex (deleted) (org.linphone.databinding.AssistantGenericAccountLoginFragmentBindingImpl._internalCallbackOnClick+30) 2023-06-05 11:24:54.807 12904-12904 DEBUG pid-12904 A #30 pc 000000000000a098 /dev/ashmem/dalvik-classes9.dex extracted in memory from /data/app/org.linphone.debug-dyfVZCnnDJPISTU3kRD9rg==/base.apk!classes9.dex (deleted) (org.linphone.generated.callback.OnClickListener.onClick+8) 2023-06-05 11:24:55.751 471-550 InputDispatcher system_process E channel 'b6f63cb org.linphone.debug/org.linphone.activities.assistant.AssistantActivity (server)' ~ Channel is unrecoverably broken and will be disposed! ---------------------------- PROCESS ENDED (12702) for package org.linphone.debug ---------------------------- 2023-06-05 11:24:55.751 471-550 InputDispatcher system_process E channel '6b37690 org.linphone.debug/org.linphone.activities.main.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 2023-06-05 11:24:55.789 471-3330 ActivityManager system_process E getPackageFerformanceMode--ComponentInfo{org.linphone.debug/org.linphone.activities.main.MainActivity}----org.linphone.debug
正式版可正常使用,需排查调试版构建设置或代码环境中的问题。
崩溃原因分析
从堆栈信息看,崩溃是_get_identity函数中访问了空地址(fault addr 0x0),调用链始于账户创建流程,说明调试版中核心身份信息对象未被正确初始化,大概率是构建配置或初始化流程的差异导致。
排查与解决方向
编译配置差异
- 检查
build.gradle和CMake配置,确认调试版是否启用了与正式版一致的编译选项。比如调试版可能因-O0优化缺失,导致空指针未被提前拦截;或DEBUG宏定义触发了某些未充分测试的条件分支。 - 对比正式版,确保调试版native库编译时未遗漏关键参数,比如架构兼容性(当前堆栈为arm64,确认构建脚本是否指定了正确ABI)。
- 检查
依赖库构建问题
- 确保使用官方提供的脚本拉取并编译所有依赖组件,调试版可能因依赖版本不匹配或未完整编译,导致
liblinphone.so功能缺失。 - 验证调试版依赖库的完整性,对比正式版的
liblinphone.so大小和符号表,排查是否有核心函数未正确编译。
- 确保使用官方提供的脚本拉取并编译所有依赖组件,调试版可能因依赖版本不匹配或未完整编译,导致
初始化与权限问题
- 检查调试版LinphoneCore的初始化流程,确认在账户创建前已完成核心对象的正确实例化,
_get_identity依赖的核心上下文可能未初始化。 - 确认调试版已申请必要的权限(如网络权限),权限缺失可能导致账户配置获取失败,进而引发空指针。
- 检查调试版LinphoneCore的初始化流程,确认在账户创建前已完成核心对象的正确实例化,
本地代码修改问题
- 如果对代码做过自定义修改,排查
GenericLoginViewModel、AccountCreatorImpl等账户创建相关类,确认是否引入了未判空的调用逻辑,导致native层接收空指针。
- 如果对代码做过自定义修改,排查
验证步骤
- 使用官方调试构建脚本重新编译项目,排除自定义配置的干扰。
- 在native层
_get_identity函数添加日志或断点,定位具体空指针来源。 - 对比正式版与调试版的编译参数、依赖版本,逐一排除差异点。
内容的提问来源于stack exchange,提问作者dnj
相关产品推荐
相关产品推荐

