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.
这只是一个警示、其他人使用第三方 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.