This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM48L952:CCS 调试器不会显示 Arm FuSa 针对 RTOS ThreadX 编译的静态库中的汇编语言 Dwarf-3调试信息

Guru**** 2318830 points
Other Parts Discussed in Thread: RM48L952
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1502150/rm48l952-assembly-language-dwarf-3-debug-information-from-arm-fusa-compiled-static-library-for-rtos-threadx-is-not-being-displayed-by-ccs-debugger

部件号:RM48L952

工具/软件:

我正在使用 CCS 版本12.8.1为 TI Hercules 处理器 RM48L952进行编译、汇编、链接和调试代码。  TI 的 Hercules 微控制器开发套件中运行了处理器。   

我已经使用开发环境近一年了,它是稳定的,在所有其他方面都运行良好.

最后一个链接添加了 ThreadX、它是使用 ARM FuSa 工具链和适用于嵌入式 FuSa 的 ARM FuSa 编译器 ArmRegistered编译器6.16.2 LTS 构建为静态库。

TI CCS 调试器中所有方面的代码执行都正常工作。  在调试器中调试 ARM asm 源代码时、这只是 CCS 调试器不显示的问题。  ThreadX 的 ARM C/C++源代码正确显示在 CCS 调试器中。  

++++++++++++++++++++++++++++++++++++++++++++++++++

示例:

CCS 调试器中 ARM 静态库的单步 C/C++代码工作正常。  在 ThreadX 静态库中的 asm 函数中执行: "ThreadX_XDER_611.a"、将单步 asm 代码执行到函数_tx_thread_schedule ()中:

因此、在单次 ASM 执行步骤后、"Disassembly"窗口是正确的、但在上面的空白窗口中、我们会看到 CCS 调试器发出的消息:

C:\Users\0xd6e0\workspace_v12_8_1\IslandDER\Debug\IslandDer.out:{3}Kip_Leitner{4}处没有"_TX_thread_schedule()的源

但是、我们可以在"Disassembly"窗口中看到 CCS 具有正确的反汇编代码。  另外,我们还可以看到 ThreadX_XDER_611.a 库中函数符号"_tx_thread_schedule()的符号查找是正确的,因为它显示在"Disassembly"中。  唯一的问题是、我们在源代码窗口中看不到文件内容。

现在、我使用 readelf 确认静态库文件 ThreadX_XDER_611.A 中存在函数_tx_thread_schedule 的符号交叉参考:

readelf 还报告、有关 DWARF-3格式行号的某些数据:

此外、源代码文件也包含在此处的调试器中:

此外、源文件列在 CCS Debugger 中:

您可以看到、显示由 CCS HAL 生成的 asm 代码是可以正常的。 只需复位调试器中的处理器、CCS 调试器即可正确加载中断向量 asm 文件:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TI 的某个人可以看看这个吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再次 ping 螺纹。  

    TI 的某个人可以看看这个吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想知道 TI 是否有人能看一下这个。  问题创建已有一周时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    仍然希望 TI 的某人能看一看这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kip:

    我对延迟的回复表示歉意!

    我在这个问题上工作了一段时间、但我不是 ThreadX RTOS 专家。 因此、我找不到问题的根本原因。

    在本模块中、我尝试联系某个专家、我将尽快提供我的更新。

    --
    此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助。  这对我们来说是个大问题、因为我正在调试 ThreadX 中断和上下文切换。  

    此外:

    • 我们目前正在使用 Black-Hawk XDS200调试探针、但很快将升级到 Black-Hawk XDS560v2
    • 我对所有图像文件都尝试了 Dward-3和 Dwarf-4、但 CCS 仍然不显示源 asm 代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还在这方面进行状态升级?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Jagadish、这方面还有什么状态更新?

    自从我几天前的最后一个要求以来,我尝试了一种新的方法。  我不使用 ARM FuSa 编译器创建库对象、而是直接将所有*。obj 文件直接链接到 Code Composer Studio 中。

    仍然存在完全相同的问题。

    因此、我们知道这个问题与 Dwarf-3输入*。obj 文件是位于静态库中还是链接至链接器的 TI 输出文件中无关。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jagadish。  这仍然不起作用。  问题也一样。  您能帮帮吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kip:

    您能否确保您在项目中遵循以下所有内容:

    调试符号格式兼容性:

    验证 ARM FuSa 编译器生成的调试符号是否与 CCS 兼容。

    检查 ARM FuSa 中的 DWARF 版本(DWARF-3)是否与 CCS 预期的内容相匹配。

    尝试使用不同的调试符号选项生成 ThreadX 库。

     

    源路径配置:

    验证 CCS 中的源文件路径是否与 ThreadX 库编译期间使用的路径相匹配。

    将 ThreadX 源目录添加到 CCS 源查找路径中。

    检查 Windows 与开发环境之间是否存在任何路径映射问题。

     

    工程设置:

    "Project"->"Properties"->"Debug"->"Source Lookup Path"。

    添加 ThreadX 源代码目录。

    启用"Search source files in the build directory"。

    替代调试信息:

    尝试使用完整的调试信息重建 ThreadX 库(-g3选项)。

    确保源路径作为相对路径存储在调试信息中。

     

    源文件关联:

    在 CCS 中:

    Window -> Preferences -> C/C++-> File Types

    -为程序集文件添加.s 和.S 扩展名(如果不存在)。

     

    库构建配置:

    构建 ThreadX 时:

    使用--debug 选项

    include -g 标志

    确保保留源文件路径。

    尝试使用绝对路径:

    修改 ThreadX 构建以对源文件使用绝对路径。

    相应地更新 CCS 源查找。

    --
    此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jagadish:

    我已经做过很多次了、你建议的一切--除了--你提到的第一件事、你称之为"调试符号格式兼容性"。   由于我没有 TI CCS 调试器的源代码、因此我不知道它有什么"预期"。  

    但是、Chat GPT 报告 CCS LTS 编译器不兼容。  这就是答案。  我们可以在这里停下来。  问题永远不会得到解决。  我需要找到权变措施。  谢谢。

    <聊天 GPT 问题> TI CCS 工具链是否与标准 Dwarf3调试信息规范完全兼容?

    <聊天 GPT 答案>

    德州仪器(TI) Code Composer Studio (CCS)支持 DWARF 调试信息、但是 它不是与标准 DWARF 3规范的所有方面完全和普遍兼容的 。 以下是细分信息:

    1. CCS 中的 DWARF 版本支持

    • 过去使用的 TI 编译器工具(例如 TI ARM、C2000或 MSP430编译器) 专有调试格式 、但是 较新的版本支持 DWARF 主要 DWARF 2和 DWARF 3的一部分

    • 不能保证完全符合 DWARF 3标准 。 支持取决于:

      • 具体情况 TI 编译器版本 收发器。

      • 目标处理器架构 (例如 ARM、C6000等)。

    2. 已知限制和注意事项

    • CCS 与其自己的调试器和调试格式很好地集成。 使用 DWARF 时、可以是 已去除或部分实现 、尤其适用于:

      • 复杂的数据类型

      • 调试经优化的代码

      • 一些形式的内联代码和调用栈展开

    • 第三方工具 (例如 GDB)可能不完全了解 TI 编译器生成的调试信息。

    3. CCS 中 DWARF 的用例

    • 如果您正在 CCS 中生成代码、但希望使用外部工具(如 GDB 或自定义分析)、则启用 DWARF 可以有所帮助 但您可能会遇到兼容性问题

    • CCS 主要旨在与配合使用 TI 自有的调试格式 、其内部支持比 DWARF 更好。

    4. 如何检查 DWARF 输出

    要查看编译器发出的 DWARF 版本:

    • readelf --debug-dumpdwarfdump对目标文件使用或。

    • 请检查编译器选项。 例如、在 TI ARM 编译器中--symdebug:dwarf、可能需要发出 DWARF 信息。

    摘要

    功能 CCS 中的 DWARF 3
    完全合规 X 否
    部分支持 White check mark 是
    推荐用于 CCS 调试 X 否(首选 TI 格式)
    可与外部工具一起使用 Warning️ 限制—测试兼容性
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kip:

    我与编译器团队就该问题进行了讨论;问题是在我们使用 ARM LTD 编译器(ARM FuSa 编译器)的情况下、它们只能协助 TI ARM 编译器。 所以他们甚至无法帮助我们解决这个问题。

    他们提供了以下有关 TI ARM 编译器的信息:

    TI ARM 编译器支持 DWARF 3和 DWARF 4。  默认情况下、编译器生成 DWARF 3调试信息。  

    编译器用户指南列出了支持的所有 ARM DWARF 版本。  请参阅表2-3

    https://www.ti.com/lit/ug/spnu151w/spnu151w.pdf

    --

    此致、
    Jagadish。