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.

[参考译文] 第三方工具的 DWARF 3与 DWARF 4

Guru**** 2526830 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1220659/dwarf-3-vs-dwarf-4-for-3rd-party-tools

这只是一个警示、其他人使用第三方 EABI 分析器进行 POST 处理。

对于 EABI、CCS 默认二进制输出是 DWARF 4。 然而 DWARF 4似乎是一些第三方的解析者的问题。 以下工具无法在 DWARF4 EABI .out 文件中"查找"某些或所有 DWARF 符号。

1)引导程序 ASAP2工具集 v15.0 (ASAP2Updater.exe):

   未找到结构成员符号。 可以找到其他符号。

2) DWARF Explorer (dwex) 2.31: 注意"Warf Explorer"明确表示它支持 DWARF v2至 v5。

   未列出头文件、因此缺少.h 文件中定义的符号。

3) ASAP2Demo 8.0.61 C2000 ELF 同步 工具:

   未找到 DWARF 符号。 DWARF 符号窗口为空。

在本例中、权变措施是将 CCS 输出更改为 DWARF v3。

所有提到的工具现在都能够检测 DWARF 符号、例如:

我将向工具供应商指出这篇文章、但如果 CCS 专家有任何技巧、请他们在此处发表评论会很好。

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

     TI 编译器中的 Dwarf 4 一文非常贴切。

    谢谢。此致、

    -George.

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

    感谢您的回复和链接。 我已经阅读了两遍了、但看不到这可能解释了我所看到的问题。

    在 DWARF4输出中、似乎不会发出头文件中的结构符号。 这是否有意为之? 这可以在附加的演示二进制文件中看到。

    e2e.ti.com/.../driverlib_5F00_lp_5F00_f28003x_5F00_foo.zip

    v3文件中显示的结构成员 member1和 Member2不会出现在 v4 .out 文件中。

    我要求 DWEX 作者对文件发表评论。 他说:

    "在 DWARFv4二进制的 readelf 输出中、没有 lab_main.h 的编译单元 v3文件中有198个 CU、v4文件中有197个 CU。

    我想我们可以放心地得出这样的结论,即"

    到目前为止的证据表明、CCS 的 DWARF4输出无法被其他工具使用、这有点超出了调试信息标准的范围。

    请您向开发人员核实一下、并解释在这种情况下为什么 DWARF4文件中应该缺少 lab_main.h 编译单元?

    谢谢你。

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

    使用该实用程序 ofd2000 以检查 输出 文件。   C28x 汇编工具手册中介绍了相关内容。  我使用了这些命令...

    % ofd2000 -g "driverlib_lp_f28003x_foo(DWARF3).out" > d3.txt
    % ofd2000 -g "driverlib_lp_f28003x_foo(DWARF4).out" > d4.txt

    在 Dwarf3中、显示有关包含的结构的信息 成员1. 成员2. 和 typedef 创建 foo_st 都包含在单个中 dw_tag_compile_unit

        00001c90   2 DW_TAG_compile_unit
        00001c91        DW_AT_name       ..\lab_main.h
        00001c95        DW_AT_stmt_list  .debug_line(21) + 0x465
        00001c99        DW_AT_language   DW_LANG_C
        00001c9a        DW_AT_comp_dir   W:\Examples\driverlib_lp_f2800
                                         3x\CPU1_FLASH
        00001c9e        DW_AT_producer   TI TMS320C2000 G3 C/C++ Codege
                                         n PC v22.6.0.LTS Copyright (c)
                                          1996-2018 Texas Instruments I
                                         ncorporated
        00001ca2        DW_AT_TI_version 1
        00001ca3   3    DW_TAG_structure_type
        00001ca4           DW_AT_sibling     .debug_info(20) + 0x1cd5
        00001ca8           DW_AT_byte_size   2
        00001ca9           DW_AT_decl_column 16
        00001caa           DW_AT_decl_file   1
        00001cab           DW_AT_decl_line   12
        00001cac   1       DW_TAG_member
        00001cad              DW_AT_name                 member1
        00001cb1              DW_AT_accessibility        1
        00001cb2              DW_AT_data_member_location DW_OP_plus_uconst 0
        00001cb5              DW_AT_decl_column          14
        00001cb6              DW_AT_decl_file            1
        00001cb7              DW_AT_decl_line            13
        00001cb8              DW_AT_type                 .debug_info(20) + 0x2286
        00001cbc              DW_AT_TI_symbol_name       member1
        00001cc0   1       DW_TAG_member
        00001cc1              DW_AT_name                 member2
        00001cc5              DW_AT_accessibility        1
        00001cc6              DW_AT_data_member_location DW_OP_plus_uconst 1
        00001cc9              DW_AT_decl_column          14
        00001cca              DW_AT_decl_file            1
        00001ccb              DW_AT_decl_line            14
        00001ccc              DW_AT_type                 .debug_info(20) + 0x2286
        00001cd0              DW_AT_TI_symbol_name       member2
        00001cd5   4    DW_TAG_typedef
        00001cd6           DW_AT_name        foo_st
        00001cda           DW_AT_language    DW_LANG_C
        00001cdb           DW_AT_decl_column 3
        00001cdc           DW_AT_decl_file   1
        00001cdd           DW_AT_decl_line   15
        00001cde           DW_AT_type        .debug_info(20) + 0x1ca3

    在 Dwarf4中、相同的信息被拆分为两个不同的部分 dw_tag_type_unit 条目。   

        000000ab  48 DW_TAG_type_unit
        000000ac        DW_AT_stmt_list .debug_line(22) + 0x2498
        000000b0        DW_AT_producer  TI TMS320C2000 Linker PC v22.6
                                        .0 Copyright (c) 1996-2018 Tex
                                        as Instruments Incorporated
        000000b4  15    DW_TAG_structure_type
        000000b5           DW_AT_sibling     (null)
        000000b9           DW_AT_byte_size   2
        000000ba           DW_AT_decl_column 16
        000000bb           DW_AT_decl_file   7
        000000bc           DW_AT_decl_line   12
        000000bd   8       DW_TAG_member
        000000be              DW_AT_name          member1
        000000c6              DW_AT_accessibility 1
        000000c7              DW_AT_decl_column   14
        000000c8              DW_AT_decl_file     7
        000000c9              DW_AT_decl_line     13
        000000ca              DW_AT_type          0x8d8a42f3ebac3771
        000000d2   7       DW_TAG_member
        000000d3              DW_AT_name                 member2
        000000db              DW_AT_accessibility        1
        000000dc              DW_AT_data_member_location DW_OP_plus_uconst 1
        000000df              DW_AT_decl_column          14
        000000e0              DW_AT_decl_file            7
        000000e1              DW_AT_decl_line            14
        000000e2              DW_AT_type                 0x8d8a42f3ebac3771
    
    <skip some lines>
    
        00000103  48 DW_TAG_type_unit
        00000104        DW_AT_stmt_list .debug_line(22) + 0x2498
        00000108        DW_AT_producer  TI TMS320C2000 Linker PC v22.6
                                        .0 Copyright (c) 1996-2018 Tex
                                        as Instruments Incorporated
        0000010c  19    DW_TAG_typedef
        0000010d           DW_AT_name        foo_st
        00000114           DW_AT_decl_column 3
        00000115           DW_AT_decl_file   7
        00000116           DW_AT_decl_line   15
        00000117           DW_AT_type        0x4f83ce88e05797f8
    

    也许这些其他的 Dwarf 实用程序不处理 dw_tag_type_unit 条目。

    解释为什么 DWARF4文件中缺少 lab_main.h 编译单元

    我同意这个字符串 lab_main.h 应该会显示在 Dwarf4信息中的某个位置。  我不知道为什么它不在那里。  我无法以小规模的方式重现此行为。  您的构建是否作为 CCS 项目进行组织?  如果是、请按照文章 共享项目中所述进行压缩、并 zip 文件附加到您的下一篇文章中。

    谢谢。此致、

    -George.

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

    谢谢您的分析 George。 我会记下该实用程序。

    请查看随附的整个 CCS 工程、我从中生成了示例.out 文件。

    e2e.ti.com/.../driverlib_5F00_lp_5F00_f28003x.zip

    这一点现在开始变得有意义了。 在 CCS 调试器中监视 myFoo 结构似乎并不依赖于是否存在封闭式编译单元。 其他工具(例如 DWEX)依赖于在 cus 上下文中显示符号。 无 CU、无符号。

    我认为、如果我们能让 lab_main.h 编译单元出现在.out 文件中、那么所有工具的问题就有望得到解决。

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

    感谢您提交项目。

    我想如果我们能让 lab_main.h 编译单元显示在.out 文件中

    它不像这样工作。  可以回忆一下 lab_main.h 不会出现在 Dwarf 信息中。  即便如此、CCS 也能了解该文件并根据需要对其进行读取。  在 CCS 中、将鼠标悬停在其上 foo_st 指定 lab 的 main.c 并查看...

    我在这些行文中添加了这两条评论,以证明这不是以机械方式复制的。  CCS 必须复制其中的行 lab_main.h 以创建该显示。   

    这不是一件不寻常的事。  在之前的几行中、键入 name uint64_t 出现了。  将鼠标悬停在上面并查看...

    该行从 C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/include/sys/_stdint.h.复制而来  而不是字符串 stdint _stdint 不出现在 Dwarf 信息的任何位置。   

    所有这些在幕后如何工作?  我不知道。  CCS 以 Eclipse 开源项目为基础。  我担心将 Dwarf 信息映射到这些源代码行的代码深于开源代码。  这意味着可能很难弄清楚细节。

    谢谢。此致、

    -George.

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

    我的理解是、将鼠标悬停在 CCS 编辑器中的符号上时、"弹出窗口"会显示此类信息、Eclipse 索引器用于解析源代码、而不是提取任何 DWARF 调试信息。

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

    对于我在本主题中犯的一些错误、我深表歉意。

    第一个是、我错误地认为 Dwarf 调试信息用于创建显示将鼠标悬停在类型名称上时 CCS 显示。  而是使用分度器。  如果禁用索引器、则该功能将停止工作。   

    我也怀疑这是不正确的...

    我同意该字符串 lab_main.h 应显示在 Dwarf4信息中的某个位置。

    内部讨论仍在进行中,因此我不确定。  我会回来解答您的问题。

    目前的证据表明,CCS 的 DWARF4输出无法被其他工具使用,这有点不如调试信息的标准。

    Dwarf 标准不要求使用任何特定的 Dwarf 标签或属性。  但在使用它们时,与它们相关的含义是标准中所定义的。  因此、允许在中指定类型信息 dw_tag_compile_unit 或 A dw_tag_type_unit 。  不幸的是,考虑到我们不知道的对第三方工具的影响,我们开发和测试编译器(包括 Dwarf 信息)是不切实际的。

    谢谢。此致、

    -George.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我同意该字符串 lab_main.h 应显示在 Dwarf4信息中的某个位置。

    我提交了 EXT_EP-11147条目 、请求对此情况进行调查。  我们欢迎您通过这个链接来了解这一点。  请注意、它被归档为增强功能、而不是错误。  这是因为、对于 CCS 和其它由 TI 提供的工具、这个运行方式不会引起任何问题。  尽管如此、它还是值得开发团队仔细研究。

    谢谢。此致、

    -George.

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

    感谢提升的增强。