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/66AK2H12:从虚拟基类派生的CCS调试对象

Guru**** 2427000 points
Other Parts Discussed in Thread: 66AK2H14, AM3352

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/629959/ccs-66ak2h12-ccs-debugging-objects-derived-from-virtual-base-class

部件号:66AK2H12
主题中讨论的其他部件:66AK2H14AM3352

工具/软件:Code Composer Studio

CCS 7.2 , SYS/BIOS 6.50 ,XDCtools 3.50

调试从抽象基类派生的类(即包含纯虚拟函数)的对象时遇到问题。 如果我创建派生对象的新实例并尝试在表达式中查看它,我会收到一条消息: “错误:无法从非原始位置加载”。  然而,该物体按我的预期运行。 如果我逐步执行代码并进入从抽象类派生的对象,则在表达式中看不到成员变量(继承或不继承)。 当我尝试查看'this '时,调试器在类型下显示正确的类。当我展开'this '(以查看成员)时,我得到类型为"unknown"和值:"invalid member name in macro"。 也许这是一个线索?

如果我无法查看从抽象基类派生的对象,我的项目将会困难得多。 我非常感谢您的帮助。

谢谢!
Mike

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

    I在调试从抽象基类派生的类(即包含纯虚拟函数)的对象时遇到问题。 如果我创建派生对象的新实例并尝试在表达式中查看它,我会收到一条消息: “错误: 无法从非初始位置加载"。

    使用GCC ARM编译器的a Cortex-A15内核上的程序存在此问题,还是使用TI C6000编译器的C66内核上的程序存在此问题?

    有线程 CCS/CCStudio-Sitara: C++代码,无法在调试器中看到变量类 ,在使用GCC ARM编译器时,可能会出现相同的问题症状,但在引用的线程中没有已知的解决方法。

    不确定您是否遇到了相同的问题或不同的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,切斯特。 很抱歉,我在几天内没有收到您的回复。 是的,我正在使用GNU 4.9 v.3进行编纂。 您参考的链接E2E讨论线程似乎正在讨论相同的错误。 我希望TI的人员能够及时提供状态更新或有关如何解决问题的信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您认为使用GNU 6.3 1编译可以解决问题吗? [我很快就以为我会尝试,但我的项目没有编译。 我正在使用NDK 2.25 .1.11 ,并且我获得了对LITTLE_ENDIAN和结构时间值的多个定义。 我没有看到一个简单的解决方法,所以暂时退下来]。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    如何在ak2h12中更改app_port0_phy_addr?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Do you sink Compiling with GNU 6.3 1 will solve the problem?

    我会尝试使用非SYS/BIOS程序,但目前无法访问所需的硬件(可以在周末尝试)。

    我很快就想尝试一下,但我的项目没有编译。 我正在使用NDK 2.25 .1.11 ,并且我获得了对LITTLE_ENDIAN和结构时间值的多个定义。 我没有看到一个简单的修复程序,所以我暂时从内存中退了下来[/引用],当我上次尝试使用由GNU 4.9 开发的SYS/BIOS程序时,4当尝试使用GNU 6.3 时,编译器出错1,但不记得确切的细节。 我认为GNU 6.3 1附带了与SYS/BIOS include文件冲突的include文件。

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

    您认为使用GNU 6.3 编译可以解决问题吗?

    我将之前的问题裸机示例移植到EVMK2H的Cortex-A15内核上运行。 使用 Windows下运行的CCS 7.3 .0.0.0019万。

    当使用GNU v 4.9 编译程序用于Cortex-A15时,CCS 7.3 调试器无法显示 m_pMaster 或m_pMasterPlat类变量的值:

    使用 GNU 6.3 v.1和CCS 7.3 调试器编译Cortex-A15程序仍无法显示 _pMaster 或m_pMasterPlat类变量的值:

    例如,从GNU v.4.9 .3更改为6.3 v.1不能解决问题。

    现附上Cortex-A15内核所使用的项目 。e2e.ti.com/.../66AK2H14_5F00_GCC_5F00_class_5F00_variables.zip GNU编译器版本v 4.9 3和v 6.3 .1有单独的构建配置。

    使用TI编译器8.1 v.4为C66内核编译了相同的测试程序。 在  C66内核上运行程序时,CCS 7.3 调试器会正确显示_pMaster或m_pMasterPlat类变量的值:

    C66内核的示例附在 e2e.ti.com/.../66AK2H14_5F00_C66_5F00_class_5F00_variables.zip上

    不确定问题是ARM GNU编译器如何编码调试信息,还是CCS 7如何解释调试信息。

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

    不确定问题是ARM GNU编译器如何编码调试信息,还是CCS 7如何解释调试信息。

    CCS安装的ARM GNU编译器具有 arm-none-eabi-gdb可执行文件,CCS 7.3 包含 XDS GDB代理

    CCS 7.3 XDC GDB代理似乎不支持Cortex-A15,因为当尝试将 gdb_agent_console与用于66AK2H14的板数据文件一起使用时,出现“No CPU that support GDB are defined in configuration file”(配置文件中未定义支持GDB的CPU)错误。

    因此,使用AM3352中的Cortex-A8进行了调查:

    1)在CCS中,7.3 使用GNU 4.9 v.3编译器创建了一个测试程序项目。 CCS 7.3 调试器无法显示 m_pMaster 或m_pMasterPlat类变量的值,其方式与程序在Cortex-A15上运行时相同。

    2)使用CCS创建的板数据文件启动CCS 7.3 gdb_agent_console程序:

    C:\Users\MR_halfword\E2E_SAMPLE_projects_CCS7\AM3352_GCC_CLASS_variables\Debug>\ti\ccs730\ccsv7\CCS_base\common\uscif\gdb_agent_console.exe "c:\Users\MR_halfword\AppData\Local\Texas Instruments \CCS\ccsdat\0\0\0\0\0\Brdat TestBoard.730"
    端口
    ------- ---
    cortxa8. :5.5万
    立方米 :5.5001万
    
    开始所有核心
    CPU名称 状态
    -------------------- --------
    cortxa8. 正在等待客户机
    m3_wakeupss 正在等待客户端
    cortxa8. 客户端已连接...正在连接到目标
    cortxa8 -处理器类型=Cortex_A8 (Little Endian)
    cortxa8 -使用
    CTOOLS硬件断点支持连接目标设备。
    目标已连接...正在启动服务器 

    从  CCS安装的gcc-arm-none-eabi-4_9-2015q3中运行arm-none-eabi-gdb程序,并使用命令加载GCC 4.9 v.3使用CCS项目编译的程序,并逐步执行测试程序:

    C:\Users\MR_Halfworth\E2E_Example_Projects_CCS7\AM3352_gcc_class_variables\Debug>c:\ti\ccs730\ccsv7\tools\compiler\gcc-arm-none-eabi-4_9-2015q3\bin\gdb\gGNU arm-none-eabi-gdb.exe
    gdb (
    
    用于ARM嵌入式处理器的GPTools) 7.8 ,0.2015.0604万 ,免费的,,和新版本,免费的版本:gnu.org/.../gpl.html>
    
    在法律允许的范围内,不提供任何担保。 有关
    详细信息,请键入"show copying"和"show warranty"。
    此GDB配置为“--host=i686-w64-mingw32 --target=arm-none-eabi”。
    键入"show configuration"以获取配置详细信息。
    有关错误报告说明,请参阅
    :www.gnu.org/.../>。
    在
    www.gnu.org/.../>上在线查找GDB手册和其他文档资源。
    要获得帮助,请键入"help"。
    键入"apropos word"以搜索与"word"相关的命令。
    (gdb)目标远程localhost:5.5万
    在
    ??中使用localhost:55万x8001208c进行800.1208万进行远程调试 ()(gdb)
    文件AM3352_gcc_class_variables.out
    已调试程序。
    是否确定要更改文件? (y或n) y
    从AM3352_gcc_class_variables.out读取符号...完成。
    (gdb)加载
    部分.rseile,大小0x70 lma 0x80亿
    加载部分.text,大小0x134dc lma 0x8000.007万
    加载部分.arm.extab,大小0x160 lma 0x8001354c
    加
    
    载部分.arm.exidx,大小0x208 lma 0x800136ac加载部分.data,大小0x8d8 lma 0x80010x
    加载部分.0x80013ma,地址0x8000X80000040</s>8000.004万 负载大小8.232万
    传输速率:153 KB /秒,924字节/写入。
    (gdb) b主
    断点1,位于0x8000.0158万:file ../AM3352_gcc_class_variables.cpp,第14行。
    (gdb)继续
    。
    
    断点1,main ()位于../AM3352_gcc_class_variables.cpp:14
    如果(m_pMaster == NULL)
    (gdb)步骤
    16 m_pMaster = new masterclass();//将其分配到位于
    
    ../master_class.cpp:11的堆区(gdb)步骤masterclass::masterclass (thes=0x8.0014万c28)中
    masterclass::masterclass()
    (gdb) step
    ChildClass::ChildClass (thes=0x8.0014万c30),位于../child_class.cpp:10
    10. ChildClass::ChildClass()
    (gdb)步骤
    13 }
    (gdb) step
    masterclass::masterclass (this =0x8.0014万c28),位于../master_class.cpp:14
    }
    (gdb) step
    main()位于../AM3352_gcc_class_variables.cpp:19
    m_pMaster->masterValue =5;
    (gdb)步骤
    20 m_pMasterPlat.masterValue =10;
    (gdb)步骤
    22 返回0;
    (gdb) print *m_pMaster
    1美元 ={_vptr.masterclass = 0x80.012万d8 <vtable for masterclass+8>,masterValue =5,m_child ={
    _vptr.ChildClass = 0x80.012万b0 <vtable for ChildClass+8>,value0 = 6.5535万,value1 = 6.5534万}}
    (gdb) print m_pMasterPlat
    2美元 ={_vptr.masterclass = 0x80.012万d8 <vtable for masterclass+8>,masterValue = 10,m_child ={
    _vptr.ChildClass = 0x80.012万b0 <vtable for ChildClass+8>,value0 = 0,value1 = 0}
    (gdb) 

      GDB控制台中print *m_pMaster和print m_pMasterPlat命令的输出显示GNU 4.9 v.3安装中的GDB可以正确显示CCS 7.3 调试器无法显示的类变量的内容。 这表明CCS调试器如何解释来自GNU 4.9 v.3编译器的调试信息存在问题。  

    AM3352测试程序随附 在e2e.ti.com/.../AM3352_5F00_GCC_5F00_class_5F00_variables.zip上