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.

[参考译文] MSP430FR5964:Code Composer Studio 未显示局部变量

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1034348/msp430fr5964-code-composer-studio-not-showing-local-variables

器件型号:MSP430FR5964

几周前、我曾讨论过一个 Code Composer 问题、其中为单(C)源代码行生成了多个断点、随后通过将编译优化级别从-O0 (无)迁移到-og (针对调试进行优化)来解决该问题。

我刚刚注意到、对于某些构建(并非所有构建、并且尚未计算出模式)、局部变量现在不会显示在 Variables 窗口中、甚至无法添加到表达式窗口中。  这一切都是通过-og 处的构建优化实现的。 将优化移回-O0、使它们再次可见。

因此、我猜-og 会以某种方式抑制局部变量的符号信息。 为什么它会针对本应用于支持调试的优化模型执行此操作、我不知道。  它不符合逻辑、因此我怀疑其他东西正在发挥作用。

有什么想法吗?

CCS 为 V10.4、工具链为 GCC

Andrew

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

    对于局部变量、只需将代码放入使用该变量的函数中即可看到。  

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

    这 在定义和使用变量的函数内。

    但它不是每个函数和/或变量。 有些函数不显示其局部变量、有些函数显示所有变量、并且找到了仅显示其中某些变量的函数?? 切换到-O0并重新编译会显示所有变量(我认为)  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="265677" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1034348/msp430fr5964-code-composer-studio-not-showing-local-variables/3824271 #3824271"]某些函数不显示其本地变量

    您的意思是什么? 我想您已经在该函数中设置了一个断点来观察局部变量、对吧?

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

    优化可以*消除*变量,因此没有显示任何内容。

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

    实际上,首先在 main()的条目上看到了这一点,但这只是一个隐式断点。 是的、所有出现的情况都可以从断点查看、也可以从断点查看后续步骤(例如、在执行到例程之后)

    这让我想起了一个奇怪的问题、它可以追溯到过去的 Eclipse IDE 时代。 现在、这一切都是模糊的存储器、但我认为这曾经错过了顶层(主域本身)的局部变量、而您过去曾  在主入口后立即通过虚假调用来解决这一问题。 但我不认为这是相同的、因为在调用堆栈的多个位置可以清楚地看到这一点。

    我回到了优化级别。 -O0应该不是优化的、也没有看到问题。 这就带来了(神秘?) -og 优化、我一直使用它来解决之前的问题、其中-O0导致为同一源代码行生成多个断点。 我在-og 上找到的唯一信息来自 GCC 手册、其中指出:

    优化调试体验。 “‘”应为标准编辑编译调试周期的优化级别选择,提供合理的优化级别,同时保持快速编译和良好的调试体验。 ‘可调试代码,它比‘-O0’更适合,因为某些收集调试信息的编译器传递在-O0’时被禁用。

    基于这一点、我不希望-og 会抑制符号信息、但恐怕这有点黑框

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

    您好、Andrew

    另一种验证变量是否已优化的方法是在映射文件中搜索变量。 如果对变量进行了优化、则不允许在使用该变量的代码中的行中放置断点。