DevEco编译器对C++调试的一个BUG

DevEco编译器对C++调试的一个BUG DevEco编译器会根据build-profile.json5文件"runtimeOS"的配置来上传lldb调试器:

如果"runtimeOS"为 “OpenHarmony”,则上传OpenHarmony系统的lldb调试器到目标系统。

如果"runtimeOS"为 “HarmonyOS”,则上传HarmonyOS系统的lldb调试器到目标系统。

如果"runtimeOS"和目标系统的配置不一致,就会导致C++调试失败。

所以我认为DevEco编译器应该根据目标系统来上传对应的lldb调试器,而不是根据runtimeOS配置来上传。

6 回复

尊敬的开发者,您好!该功能正在规划中,还请关注后续版本,感谢您的理解与支持。


能用,

// 三重探针,缺一不可
RuntimeOSType CheckDeviceRealOsType(DeviceHandle handle)
{
    // 探针1:内核特征 (最准)
    if (handle.Shell("cat /proc/version").find("Huawei") != string::npos) {
        return OS_TYPE_HARMONY;
    }
    
    // 探针2:系统特征
    if (handle.Shell("cat /etc/oh-version").find("OpenHarmony") != string::npos) {
        return OS_TYPE_OPENHARMONY;
    }
    
    // 探针3:硬件属性 (兜底)
    if (handle.Shell("getprop ro.product.manufacturer").find("HUAWEI") != string::npos) {
        return OS_TYPE_HARMONY;
    }

    // 全挂了,才报未知
    return OS_TYPE_UNKNOWN;
}

你这回答了什么问题?

DevEco Studio C++调试断点无法命中问题

问题描述

DevEco Studio在C++调试中存在断点无法命中问题。该问题出现在特定版本的IDE中,当使用LLDB调试器对C++代码设置断点时,调试器可能跳过或忽略断点位置。

问题原因

此问题与编译器优化级别无关,主要涉及调试器符号加载机制异常。

解决方案

华为已在高版本中修复此问题,建议升级至DevEco Studio 3.1或更高版本。

这是一个非常精准的发现,确实点出了当前DevEco Studio在C++调试流程中一个关键的设计逻辑问题。

您对现象的描述完全正确:当前build-profile.json5中的"runtimeOS"字段,其本意是定义应用运行时所依赖的系统API集合(例如使用HarmonyOS API还是OpenHarmony API)。然而,调试器(lldb-server)的上传逻辑却错误地依赖了这个编译时/开发时的配置项,而不是目标设备的实际运行系统

这导致了以下典型问题:

  • "runtimeOS": "HarmonyOS"配置下开发,但将应用部署到OpenHarmony标准系统(如RK3568开发板)进行调试时,会因上传了不匹配的HarmonyOS版lldb-server而导致C++原生层调试失败。
  • 反之亦然。

您的建议是更合理的方案:调试器上传逻辑应当基于真实连接的目标设备系统类型(可通过hdc shell uname -o或类似命令识别)来动态决定,从而保证调试器与设备运行环境的绝对兼容。这能从根本上避免因配置疏忽或跨平台调试需求导致的调试器不匹配问题。

目前,作为开发者,确保"runtimeOS"配置与您实际连接调试的设备系统类型一致,是使C++调试正常工作的必要步骤。您提出的这个点对于优化工具链的健壮性和用户体验非常重要。

回到顶部