文档管理中心

代码调试断点不生效问题

问题现象

使用DevEco Studio开发工具调试代码的过程中,设置的断点不生效,尤其是在Native代码调试时,经常会碰到代码无法停在断点处的情况,影响代码开发调试效率。

背景知识

  • DevEco Studio开发工具支持ArkTS代码调试Native代码调试。开发者需要基于调试代码类型自定义调试配置
  • 代码调试时通常会用到行断点、日志断点、临时断点、函数断点、异常断点等断点类型,以满足不同的调试场景。

问题定位

  1. 当调试断点不生效时,首先应确认调试类型与调试代码是否匹配,确认方式参考设置调试代码类型
  2. 当调试C/C++代码时,确认编译类型是否被设置成了Release,确认在模块级build-profile.json5文件"externalNativeOptions"配置项中,"arguments"参数配置中存在"-DCMAKE_BUILD_TYPE=Release"配置项,如下所示:
    收起
    自动换行
    深色代码主题
    复制
    1. "externalNativeOptions": {
    2. "arguments": "-DCMAKE_BUILD_TYPE=Release"
    3. }

    若存在,则表示此时编译类型被设置成了Release,会导致调试断点不生效。

  3. 当调试C/C++代码时,确认编译时是否剥离了符号表信息,即确认"cppFlags"参数是否存在"-s"配置,如下所示:
    收起
    自动换行
    深色代码主题
    复制
    1. "externalNativeOptions": {
    2. "cppFlags": "-s"
    3. }

    若存在,则表示编译时会剥离符号表信息,会导致调试断点不生效。

分析结论

  • 原因1: 调试类型与调试代码不匹配。
  • 原因2: 编译类型被设置成了Release。
  • 原因3: "cppFlags"参数存在"-s"配置,导致编译时剥离了符号表信息。

修改建议

  • 场景1: 原因1修改策略。

    设置调试代码类型,将调试类型设置成和调试代码相同的类型,工程调试类型默认为Detect Automatically,若默认调试类型不行,可以尝试修改成和调试代码相同的类型再进行调试。

  • 场景2: 原因2修改策略。

    将编译类型修改成Debug,即将"-DCMAKE_BUILD_TYPE=Release"修改成"-DCMAKE_BUILD_TYPE=Debug"。

  • 场景3: 原因3修改策略。

    删除"cppFlags"参数的"-s"配置,让编译时保留符号表信息,即修改成"cppFlags": ""。

在 FAQ 中进行搜索
请输入您想要搜索的关键词