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 裸片

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/740422/compiler-dwarf-die-for-function-static-variable

工具/软件:TI C/C++编译器

您好!

如何在.out 文件中查找函数静态变量的 DWARF 调试信息(地址、类型)?

通过扫描.debug_info 中的所有编译单元、我可以在锚定到标签 DW_TAG_variable 的所有其他变量上找到此信息。  

Thx、

电表

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

    假设您是指在函数内定义的静态变量、而不是在文件范围内定义的静态变量。

    静态变量是函数内的另一个 DW_TAG_variable。  唯一的区别是 DW_AT_LOCATION 属性。

    考虑一下这个功能...

    int fxn (int 参数变量)
    {
    static int statical_variable = 0;
    int local_variable = argical_variable;
    
    ++static_d变量;
    return static_d变量+ local_variable;
    } 

    您不会说您使用的是哪种 TI 编译器。  目前、我假设您使用 TI ARM 编译器。  这些命令会生成该文件、然后使用 OFD 实用程序在名为 dw.txt 的文本文件中捕获.debug_info DWARF 信息。

    % armcl -s -opt_level=off -mv7m3 file.c
    % armofd -g -obj_display=none -dwarf_display=none、dinfo file.obj > dw.txt 

    然后检查 dw.txt 并找到以下行...

    000000c2 4. DW_TAG_variable (.data)
    000000c3. DW_AT 位置 DW_OP_addr 00000000
    000000c9. DW_AT 名称 STATUS_variable
    000000dd dw_at_TI_symbol_name static_dvariable$1
    000000ef 1. DW_TAG_formal_parameter (.text)
    000000f0 DW_AT 位置 DW_OP_reg0
    000000f2 DW_AT 名称 参数变量
    00000108 dw_at_TI_symbol_name 参数变量
    0000011a 4. DW_TAG_variable (.text)
    0000011b DW_AT 位置 DW_OP_Breg13 0
    0000011e DW_AT 名称 参数变量
    00000134 dw_at_TI_symbol_name 参数变量
    00000146 4. DW_TAG_variable (.text)
    00000147 DW_AT 位置 DW_OP_Breg13 4.
    0000014a DW_AT 名称 local_variable
    0000015d dw_at_TI_symbol_name local_variable 

    除了 DW_AT_LOCATION 属性外、它们都是相似的。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 C2000 cgtools v18.1.3。
    我通过 ofd2000创建了 DWARF 列表、并找到了我的问题的解决方案:
    函数中的静态变量被"隐藏"在 DW_TAG_듎 用标签后面。
    Thx、
    电表