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.

[参考译文] NOP 上的硬件断点 DOW't 似乎按预期工作

Guru**** 2576195 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected

您好!

我将使用 CCS 12与 F28379D 和 XDS110探针。

在其他处理器上、我经常使用 NOP + HW 断点来临时检查我是否到达程序的某些分支、尤其是在高度优化或内联代码中。

我的问题是、在 CCS 中、即使汇编器反映了我的源代码、我也无法在 NOP 中设置 HW BP。

此外、在 Dissassembly 窗口中的 NOP 上设置一个 HW 断点会在错误的位置停止程序。 请参见下图。

您能不能帮助您了解这里发生了什么错误? 汇编器看起来正确、但0x8CF25上 NOP 指令的 BP 不会停止那里的程序。

非常感谢。

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

    您好 Kier、

    是否可以提供一个可以在 F28379D LaunchPad 上运行的小问题测试用例? 我需要源代码的 prohect、以便我可以构建它。

    谢谢

    Ki

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

    您好 Ki、

    谢谢你。 我尝试在一个闪烁的项目中重现它、但无法复制。

    但是、我确实注意到、我的闪烁项目在反汇编视图中显示了 NOP;源代码语句、但上面的问题示例没有显示。 我不知道这是否能使问题得到澄清?

    无论如何、我想我一直坚持这一点、直到我找到足够的时间来重现它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4396180 #4396180">但我确实注意到、我的闪烁项目在反汇编视图中显示了 NOP;源代码语句、但上面的问题示例没有显示。 我不确定这是否能让人对问题有任何了解?[/引述]

    问题项目的优化级别是多少? 在有问题的项目中、该 NOP 似乎没有源代码相关性。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="2210" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4397152 #4397152"]优化级别是什么[/quot]

    它是3。

    [引用 userid="2210" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4397152 #4397152"]问题项目中该 NOP 似乎没有源代码相关性。

    我的观点正是这样的问题。 从程序流的角度来看、源代码和汇编匹配(比较=4、如果不是分支、则继续执行 NOP、否则)、那么反汇编器为什么不像在简单项目中那样建立关联?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4397929 #4397929"]它是3.[/quot]

    这非常高。 假设示例项目没有该级别的优化。

    关闭优化时会发生什么情况?

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

    情况 a)优化级别0:好的、我可以在指令 NOP (0x8AB7A)和源代码级别 BP 处正确设置 HW BW、第87行:

    情况 b)优化级别1:NG、I cannot set it (NG、我无法设置它)。 在指令 NOP (0x8AADF)处设置 HW BP 会将源级 BP 设置在错误的位置、第82行。

    但是请注意、情况(a)和情况(b)中的汇编器是相同的。 因此、在这种情况下、优化不会影响我的程序、它会影响我放置 HW BP 的能力。 从微控制器的角度来看、我认为这两种情况之间没有差别。 在这两种情况下、它都应能够将 HW BP 放置在 NOP 上。

    因此、我只能得出这样的结论:当优化增加到1或更高时、GUI 或.out 文件中的调试符号会出现一些问题。

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

    请提供一个小型测试用例(项目+源代码+输出文件)。 我可以自行重建。 请使测试用例尽可能小、但这可能会再次引起问题。  

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

    谢谢 Ki。 PFA 在我把所有东西都取出后、我的实际项目的剩余部分。

    按原样、反汇编中的 NOP 不会与具有 L1优化的源代码中的 NOP 相关联:

    如果您将文件 MAIN_CPU1.c 的优化更改为 L0、则反汇编中的 NOP与源代码中的 NOP 相关联:

    汇编语言和源代码在两种优化条件下是相同的、因此我希望源代码相关性是相同的。 我会理解优化是否删除了 NOP、但这里不是这样。

    e2e.ti.com/.../6683.CPU1.zip

    此项目用于 controlCARD。 请将_LAUNCHXL_F28379D 添加到预定义符号。

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

    谢谢 Kier、

    我也可以重现此问题。  

    请注意、在 L0情况下、您可以看到反汇编中交错的 NOP (第106行)的源代码行(请参阅黄色突出显示部分)

    在 L3情况下、交错源线缺失。 与调试器工程师交谈时、L3的调试符号似乎缺少允许调试器进行源代码关联的信息(否则、您会在"Disassembly"窗口中看到该源代码行)。 我怀疑打开 L2+(函数级优化或更高版本)可能会使编译器忽略发出与函数信息无关的某些行、无论是否从非优化情况重新排序/更改汇编指令。  

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

    感谢您的确认。 是的、调试符号确实是问题所在。 但是、请注意、问题在 L1触发。 L0正常、L1+损坏。

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

    我知道 L2是函数级、L1是本地级。 不太确定"本地"指的是什么、但我想它也会影响这一点。

    请注意、此调试行为的运行方式为"如预期"。 随着优化的增加、我们不保证适当的源代码级调试可见性。 因此、虽然可以改进、但并不是真正的"损坏"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="2210" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4400382 #4400382"]我们不能保证随着优化的增加而获得适当的源代码级调试可见性

    有关以下内容的文章:

    https://dev.ti.com/tirex/explore/node?node=A__AEm7LJjS34iFPa5fpT7ttQ__ccs_devtools__FUz-xrs__LATEST

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

    谢谢、但我熟悉这种折衷。 由于汇编器与源代码不同、调试功能应该会减小、但这里不是这样。 如果优化后汇编器不变、但工具链不再允许设置断点、无论出于何种原因、这可能是工具链中的缺陷。 我想我们必须同意不同意。

    很遗憾、在我花了一个小时左右的时间来制作可复制的示例之前、这件事没有动摇。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4400537 #4400537">无论出于何种原因,这可能是工具链中的缺陷。 我想我们必须同意不同意。[/引述]

    我不一定不同意。 它是某种限制(或缺陷)。 这肯定是改进的余地。 还值得(在我们的端)了解其他工具链(如 GCC)如何处理此问题。

    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1167938/hw-breakpoints-on-a-nop-don-t-seem-to-work-as-expected/4400537 #4400537"]很遗憾,在我花了一个小时左右的时间制作可复制的示例之前,这一点并没有消失。

    非常感谢您的可重现示例。 我希望使用它来查看我们工具的进一步增强。 我希望您不会觉得这是浪费。

    Ki

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

    谢谢、抱歉、我今天心情更好。