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.

[参考译文] CCS/TM4C129ENCPDT:调试异常堆栈不显示异常原因,仅显示之后发生的异常

Guru**** 2540720 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/576492/ccs-tm4c129encpdt-debug-exception-stack-does-not-show-cause-of-exception-only-what-happens-after

零件号:TM4C129ENCPDT
“Thread:SysBIOS”中讨论的其它部件

工具/软件:Code Composer Studio

我正在CCSV7下使用TIRTOS。  当我收到异常时,调试窗口仅显示从异常点开始直到loader_exit的过程

它似乎破坏了到这一点的堆栈(这是最有用的位)

示例

B6.0246万P1a_ETI [代码编辑器工作室-设备调试]  
 德州仪器(TI) XDS2xx USB调试探头_0/Cortex_M4_0 (挂起)  
  loader_exit() at exit.c:55 0x0.0032万EB0  
  在EXIT.c:130 0x0.0032万EBA时中止()  
  exit.c:121 0x0.0032万EF0处的exit(int)()  
  xdc_runruntime系统退出__E (int)()位于System.c:131 0x0.0039万B0A  
  TI_SysBIOS_BIOS_exitFunc__I(int)(),位于B6.0246万P1a_pem4f.c:3349 0x0.0039万C5A  
  TI_SysBIOS_family_arm_m3_Hwi_excHandlerMax_I (unsigned int *,unsigned int)(),位于BIOS.c:109 0x0.0018万CA0  
  TI_SysBIOS_family_arm_m3_HWI_excHandler__i (unsigned int *,unsigned int)(),位于Hwi.c:871 0x3.9016万  
  0xFFFFFFF0 (没有为0xFFFFFFF0定义符号)  

我可以使用ROV来查看它所在的线程,但不知道异常在线程中的什么位置,因为堆栈跟踪不显示任何信息。

为什么跟踪只从异常开始?

是否有任何方法可以增加其长度,确保其包含活动?

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

    我怀疑您正在进入下面的主题中提到的错误。 您能确认吗?
    e2e.ti.com/.../208.8665万

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

    您好Rafael

    这可能是同一个错误,不确定如何验证。

    这非常烦人,因为您可以将错误绑定到的最接近的是线程。

    所显示的只是从异常点到exit函数的栈跟踪,在该函数中,您确实需要调用栈来显示在异常之前调用的函数。

    是否有解决此错误的方法?

    我对XDS100V2调试探测器和XDS2XX调试探测器也有同样的结果

    他们在"XDC_runruntime _Error_raiseX__E"处提到设置断点,如何执行此操作,它位于哪个文件中?

    我将视图性能(窗口/首选项)从10个堆栈帧更改为20个,但没有任何区别

    还尝试取消选中“限制栈帧”选项,这没有任何区别

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通过在调试视图的断点中单击鼠标右键并选择允许我输入"XDC_runtime _Error_raiseX__E"且不需要知道哪个文件的断点,了解了如何在XDC_runtime错误_raiseX__E设置断点。

    但是,当出现异常时,我仍然无法获得堆栈。
    我还尝试了具有相同结果的不同优化级别。

    我正在使用TI 16.9 0 LTS编译器与TIRTOS 2.16 .1.4 和CCS V7
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    I了解了如何在XDC_runruntime Error_raiseX__E设置断点,方法是在调试视图的断点中单击鼠标右键,然后选择允许我输入"XDC_runtime _Error_raiseX__E"且不需要知道哪个文件中的断点。

     Rafael引用的线程,我建议在其中设置断点 On XDC_runruntime _Error_raiseX__E是由于使用GCC ARM编译器时CCS不显示完整堆栈回溯的错误造成的。 由于您使用的是TI ARM编译器 ,因此不会遇到错误CCBT-2049。

    但是,当发生异常时,我仍然无法获得堆栈。[/QUOT]发生异常后,“调试”窗口中显示的堆栈回溯跟踪包含SYS/BIOS异常处理代码。 应用程序代码的回溯应显示在Hwi模块下例外选项卡的“异常调用栈”属性中。 以下是发生异常后的屏幕截图示例:

    ROV中的异常调用栈包含生成异常的实际应用程序调用栈。 ROV视图是否在您的情况下提供了有意义的堆栈?

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

    你好Chester

    感谢您的回复,很抱歉我的回复延迟了。

    ROV堆栈只有异常调用堆栈,它没有其他堆栈信息。

    ROV至少允许我确定发生异常时正在运行的线程,但不能确定其他线程。

    我在我的一个任务中特意设置了对空指针的调用,这就是我从调试器中获得的所有信息。

    看看任务,我可以确定线程,但仅此而已

    此致

    Barry