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.

[参考译文] 调试器:如何在调用栈中查看3个以上级别

Guru**** 2587365 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1035337/debugger-how-to-see-more-than-3-levels-in-call-stack

您好!

我使用的是 CCS 10.2.0.00009、其中 F2837x controlCARD R1.3通过 XDS100v2进行连接。

调试器中显示的调用堆栈似乎只有3级深。 我如何才能看到更多内容?

谢谢你。

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

    您好!

    调用堆栈可以超过三个级别。  如果您只看到三个级别、但认为应该显示更多级别、则可能是加载的调试符号或调试器本身存在问题。 如果您确实觉得有问题、可以在此处获取调试视图的屏幕截图并提供它吗?

    谢谢

    Ki

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

    谢谢 Ki。 以下是一个示例:

    源代码调用层次结构:

    但调试器仅显示以下内容:

    如果我将断点向上移动层次结构、那么会显示更多级别、我认为我应该在上一个屏幕截图中看到这些级别、不应该这样做?

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

    只要所有调试符号都可用、就不应有理论限制。 请参阅以下示例、了解我通过 CCS 10.2.0上的 XDS100v2在 F28377D controlCARD 上运行的示例程序:

    调用堆栈已经为8深。 我已经关闭了优化、并使用了完整的调试符号。

    您能否提供一个测试用例来重现问题、其中所有调试符号均可用、但调用堆栈信息被截断?

    谢谢

    Ki

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

    谢谢 Ki、很高兴知道没有故意限制。

    不幸的是、我必须使用 COFF 作为我们项目的基础、这是一个漫长的故事。 这会产生影响吗?

    无论如何、我将尽快构建一个测试用例。

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

    我使用递归函数制作了一个 COFF 闪烁项目、可以看到您描述的许多调用堆栈级别。

      

    问题似乎与我的实际项目有关、因此我无法轻松提供简单的用例。

    如果我在这里停留、我将获得3个级别:

    如果我进入下一个函数、我会得到三个级别:

    如果我再次进入、我将获得三个有意义的级别、再加上第四个级别、在没有有意义指令的情况下、将 PC 显示在某个任意位置:

    进入另一个任意反汇编位置的步骤:

    它是任意的,但不是随机的。 再次启动程序会产生完全相同的地址模式。 0x180091、然后0x000008。

    我的程序运行正常、因此堆栈内容不得损坏。 在这种特殊情况下、调试器似乎无法正确解释堆栈。

    有什么想法我可以自己调查根本原因吗?

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

    上述屏幕截图中呼叫堆栈的底部条目包含以下消息:  

    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1035337/debugger-how-to-see-more-than-3-levels-in-call-stack/3829194 #3829194"]

    问题似乎与我的实际项目有关、因此我无法轻松提供简单的用例。

    如果我在这里停留、我将获得3个级别:

    如果我进入下一个函数、我会得到三个级别:

    [/报价]

    "下一帧与现有帧相同"

    这说明了为什么下面没有其他条目。

    解释方面?

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/875181/ccs-msp432p401r-debugging-stops-with-next-frame-is-identical-to-an-existing-frame-message/3242069#3242069

    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1035337/debugger-how-to-see-more-than-3-levels-in-call-stack/3829194 #3829194"]

    如果我再次进入、我将获得三个有意义的级别、再加上第四个级别、在没有有意义指令的情况下、将 PC 显示在某个任意位置:

    进入另一个任意反汇编位置的步骤:

    [/报价]

    调用栈的底部入口位于 ITRAP 指令上。 它看起来像是发生了一些异常。 这将解释调用堆栈无法释放更多信息的原因。

    您的程序是否按预期运行? 或者、您是否遇到了一些问题(异常)并尝试进行调试?

    谢谢

    Ki

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

    谢谢 Ki。 是的、正如我在上一篇文章中提到的、我的程序运行正常。

    我假设实际的 ITRAP0指令将停止执行。 到目前为止的所有证据表明、调试器显示的虚拟程序计数器实际上并不是实际调用栈的一部分。

    接下来、我可以了解哪些内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="479799" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1035337/debugger-how-to-see-more-than-3-levels-in-call-stack/3829798 #3829798"]我接下来可以查看什么内容?

    遗憾的是、如果没有测试案例、我将无法提供更多建议。  

    我不需要您的实际项目、只是可能重现此问题的项目。 您的项目可能是一个已删除的版本? 只要我可以在本地重现问题、我就只需要一个极少的程序。

    Ki