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/AM5728:将本机 gdb 与 CCS7配合使用

Guru**** 1993015 points
Other Parts Discussed in Thread: SEGGER, AM5728, BEAGLEBOARD-X15, DRA71XEVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/758130/ccs-am5728-using-native-gdb-with-ccs7

器件型号:AM5728
主题中讨论的其他器件:SEGGERBeagleBoard-X15DRA71XEVM

工具/软件:Code Composer Studio

你(们)好  

我想在 XDS100v2或 XDS200上使用本机 ARM GDB (与 GNU 编译器捆绑在一起)。 类似于 Segger GDB 服务器或 OpenOCD。

动机:常用 CCS 调试器并不总是显示 C++类的成员。

我想改用与 GNU 工具捆绑的 gdb。

谢谢

成形术

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

    我对 e2e 做了一些研究、发现了类似的问题、但我发现没有任何解决方案

    我 还找到了有关 gdb_agent_console.exe 的一些信息

    遗憾的是、它返回 CCS 创建的板级配置文件的错误(如下所示)

    C:\ti\ccsv7\ccs_base\common\uscif>gdb_agent_console.exe testBoard.dat

    配置文件中未定义支持 GDB 的 CPU

    C:\ti\ccsv7\ccs_base\common\uscif>

    因此、问题范围缩小到 gdb_agent_console.exe 与 XDS100v 或 XDS200的运行、

    谢谢

    成形术

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

    [引用 user="Rasty ***">动机:常用 CCS 调试器并不总是显示 C++类的成员。[/quot]您使用的是哪个版本的 CCS?

    我在 您使用 CCS 8.3引用的线程上尝试了 AM335_GCC_class_variables 示例、对于该特定示例、CCS 8.3调试器现在可以正确显示 C++类的成员。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用 CCS 7.4.0。
    表头中定义的派生类中方法的可见性问题。
    如果在 gdb 中加载可执行文件、我会看到所有成员。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

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

    [引用 user="Rasty ***">我使用 CCS 7.4.0。
    表头中定义的派生类中方法的可见性问题。 [/报价]您可以尝试使用 CCS 8.3吗?

    使用 CCS 7.4.0.00015时、C++类的显示存在问题:

    而对于 CCS 8.3.0.00009中的相同程序、将显示类变量:

    对于此测试、该程序是使用适用于 Cortex-A15的 GCC v6.3.1编译的。

    请注意、查看 CCS 8的发行说明、我无法明确提及用于在 CCS 调试器中处理 C++的缺陷修复。

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

    [引用 user="Rasty ***"]

    遗憾的是、它返回 CCS 创建的板级配置文件的错误(如下所示)

    C:\ti\ccsv7\ccs_base\common\uscif>gdb_agent_console.exe testBoard.dat

    配置文件中未定义支持 GDB 的 CPU

    我尝试了 CCS 8.3中的 gdb_agent_console、其中 AM5728连接到 Blackhawk USB560M。 在 Windows 10下使用 CCS 8.3时 、gdb_agent_console.exe 出现相同的"配置文件中未定义支持 GDB 的 CPU "错误。

    当尝试 Unbundtu 18.04 LTS 下的 CCS 8.3 gdb_agent_console 时、GDB 代理已初始化、但从 CCS 安装的 GDB 连接时失败并出现错误。 gdb_agent_console 的输出为:

    ~/ti/ccs830/ccsv8/ccs_base/common/uscif/gdb_agent_console ~/.ti/ccs830/0/0/BrdDat/testBoard.dat
    CPU 名称 端口
    --- --
    c66xx_dsp1 :55000
    c66xx_dsp2 :55001
    cortex_m4_ipu1_c0 :55002
    cortex_m4_ipu1_c1 :55003
    cortex_m4_ipu2_c0 :55004
    cortex_m4_ipu2_c1 :55005
    cortexa15_0 :55006
    cortexa15_1 :55007
    
    启动所有内核
    CPU 名称 现状
    ---- ----
    Cortex_M4_ipu2_c0等待客户端
    cortex_M4_ipu1_c0等待客户端
    cortexa15_1 正在等待客户端
    c66xx_dsp1 正在等待客户端
    c66xx_dsp2 等待客户端
    cortex_m4_ipu1_c1等待客户端
    cortex_m4_ipu2_c1等待客户端
    cortexa15_0 正在等待客户端
    cortexa15_1 客户端已连接...连接到目标
    未知设备 ID:0x75805400 (1d6、15、0、0)
    未知设备 ID:0x0 (0、0、0)
    cortexa15_1 -处理器类型=未知(大端字节序)
    cortexa15_1 -目标设备使用
    CTOOLS 硬件断点支持进行连接。
    目标已连接...正在启动服务器
    失败! GTI_READEMEMEMEMEMEM_BLK (hpid=0x1de9b70、addr=0、count=4)=ffFFFF
    (错误-1205 @ 0x0)
    设备内存总线有错误、可能挂起。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。
    (仿真包8.0.903.4) 

    GDB 的输出为:

    ~/ti/ccs830/ccsv8/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/arm-none-eabi-gdb
    GNU gdb (用于 ARM 嵌入式处理器的 GNU 工具6-2017-Q1-update) 7.12.1.20170215-git
    版权所有(C) 2017 Free Software Foundation、Inc.
    许可证 GPLv3+:GNU GPL 版本3或更高版本<gnu.org/.../gpl.html>
    这是免费软件:您可以随意更改并重新分发。
    在法律允许的范围内、不提供任何保证。 键入"show copying"
    和"show warranty"了解详细信息。
    此 GDB 配置为"--host=x86_64-linux-gnu --target=arm-none-eabi"。
    键入"show configuration"了解配置详情。
    有关错误报告说明、请参阅:
    <www.gnu.org/.../>。
    有关 GDB 手册和其他在线文档资源的信息,请访问
    :<www.gnu.org/.../>。
    如需帮助、请键入"帮助"。
    键入"apropos word"以搜索与"word"相关的命令。
    (gdb)目标远程 localhost:55007
    使用 localhost:55007远程调试
    警告:未指定可执行文件,目标不支持
    自动确定可执行文件。 尝试使用"file"命令。
    0x00000000输入?? ()
    (gdb) 

    因此、更新到 CCS 8.3不会帮助您将 GDB 服务器与本机 GDB 配合使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、您好!
    看起来很有希望!
    使用 gdb 连接时、应加载 symbol/exec 文件并发出一些低级命令、如"monitor halt"、然后通过 GDB 下载文件。

    是否要为 xds100v2和 xds200生成 dat 文件,请检查它是否与 gdb_agent_console 配合使用,并上传全部3个文件(包括 Blackhawk 文件)

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

    [引用 user="Rastation ***"]\n 您是否要为 xds100v2和 xds200生成 dat 文件,请检查它是否与 gdb_agent_console 配合使用并上传全部3个文件(包括 Blackhawk 文件)好的,使用连接到 XBeagleBoard 的 Blackhawk USB560-M 时,我在 Windows 下可以使用 CCS 7.4。 我无法使用 xds100v2进行测试、因为目前没有所需的14引脚至20引脚 CTI 适配器、也没有独立的 xds200。

    我发现、启动 gdb_agent_console 时、必须为板数据文件提供绝对路径、以避免出现"配置文件中未定义支持 GDB 的 CPU "错误。 我已经报告过、在 "="" if="" a="" relative="" path="" to="" the="" board="" data="" file="" is="" given"="">CCS/BeagleBoard-X15中:如果提供了板数据文件的相对路径、CCS 7.4 gdb_agent_console 会报告"没有在配置文件中定义支持 GDB 的 CPU "

    随附的 zip 文件包含使用的测试项目:

    a. CCS 7.4调试器无法显示类变量的 C++测试程序。

    b. targetConfigs\testBoard_bh560usbm.dat 是由 CCS 测试连接生成的板数据文件。

    c. targetConfigs\gdlbinit 是一个 GDB 脚本、用于执行以下操作:

    -连接 到 cortexa15_0内核端口上的 gdb_agent_console。

    -监视停止,停止任何正在运行的程序。

    -修改 CPSR 寄存器,将处理器设置为 ARM 模式和 Supervisor 模式。 这是 ccs_base\emulation\boards\am572x\gel\AM572x_startup_common.gel 脚本中的函数 AM57xxStartState()的一部分。 这是为了通过将处理器置于已知状态来方便代码加载和调试。 请注意 ,AM57xxStartState() GEL 函数也会禁用 MMU,但 GDB 脚本不会禁用 MMU,因为我尚未确定如何从 GDB 脚本修改 REG_CTXA15_CP15_C1_SCTLR 寄存器。

    -加载程序。

    -在 main 处设置断点。

    -继续执行、该操作应到达 main 处的断点。

    测试步骤的顺序为:

    1.重置 BeagleBoard-X15并按空格键以在 U-Boot (即加载 Linux 之前)暂停。

    2.启动 gdb_agent_console、如上所示、为板数据文件提供绝对路径:

    C:\users\MR_halfword\E2E_Example_Projects\AM5728_GCC_class_variables>c:\ti\ccs740\ccsv7\ccs_base\common\uscif\gdb_agent_console.exe c:\users\MR_halfword\E2E_Example_projects\AM5728_GCC_class_variables\targetConfigs\testBoard_bh560usbm.dat
    CPU 名称 端口
    --- --
    c66xx_dsp1 :55000
    c66xx_dsp2 :55001
    cortex_m4_ipu1_c0 :55002
    cortex_m4_ipu1_c1 :55003
    cortex_m4_ipu2_c0 :55004
    cortex_m4_ipu2_c1 :55005
    cortexa15_0 :55006
    cortexa15_1 :55007
    
    启动所有内核
    CPU 名称 现状
    ---- ----
    Cortex_M4_ipu1_c0等待客户端
    c66xx_dsp2 等待客户端
    cortex_m4_ipu2_c1等待客户端
    cortex_m4_ipu2_c0等待客户端
    cortexa15_0 正在等待客户端
    cortexa15_1 正在等待客户端
    c66xx_dsp1 等待客户端
    cortex_m4_ipu1_c1等待客户端 

    3.启动 GDB,使 init 脚本和程序能够加载。 这会加载程序、但不会命中 main 处的断点:

    C:\users\MR_半 字\E2E_Example_Projects\AM5728_GCC_class_variables>c:\ti\ccs740\ccsv7\tools\compiler\gcc-arm-no-eabi-6-2017-Q1-updates\binarm-none-eabi-gdb.exe --command=gdb etConfigs\gdb IT Debug2017\AM5728_gun-example-g215-gv-gv1.gebu
    
    for GNU compilit-g4.2017-gv-gv-g215-gv-gv-g4.g4.gv1.gv1.gv1.gv1.gv1.gv1.gv1.g4.
    许可证 GPLv3+:GNU GPL 版本3或更高版本<gnu.org/.../gpl.html>
    这是免费软件:您可以随意更改并重新分发。
    在法律允许的范围内、不提供任何保证。 键入"show copying"
    和"show warranty"了解详细信息。
    此 GDB 配置为"--host=i686-w64-mingw32 --target=arm-none-eabi"。
    键入"show configuration"了解配置详情。
    有关错误报告说明、请参阅:
    <www.gnu.org/.../>。
    有关 GDB 手册和其他在线文档资源的信息,请访问
    :<www.gnu.org/.../>。
    如需帮助、请键入"帮助"。
    键入"apropos word"以搜索与"worp"...相关的命令。
    从 Debug\AM5728_gcc_class_variables.out...完成。
    0x00000000 in? ()
    CPU 已暂停
    $1 = 0xFA010040
    $2 = 0xFA010053
    加载段.rslice、大小0x70 lma 0x40300000
    加载段.text、大小0x11918 lma 0x40300070
    加载段.arm.extab、大小0x120 lma 0x40311988
    
    加载段.arm.exidx、大小0x1c0 lma 0x400008加载
    段0x403lma .cr .0008、大小0x403lma 加载段0x408l 大小0x4 lma 0x40312634
    起始地址0x40300050、负载大小75320
    传输速率:1501 KB/秒、918字节/写入。
    0x403001bc 处的断点1:文件./66AK2H14_gcc_class_variables.cpp、行13。 

    怀疑第一次尝试运行程序失败到 main 的原因是 GDB init 脚本未禁用 MMU (或者可能是 CCS GEL 脚本在连接到 A15内核时执行的一些其他操作)。

    由于程序尚未到达 main、因此使用 Ctrl-C 中断 GDB、然后退出:

    对接收到的信号 SIGTRAP、跟踪/断点陷阱进行编程。
    0x0c000000 in?? ()
    (gdb)退出
    调试会话处于活动状态。
    
    下一个1 [远程目标]将被分离。
    
    是否仍然退出? (y 或 n) y
    从程序中分离:C:\Users\MR_halfword.\E2E_Example_Projects\AM5728_GCC_Class_Variables\Debug\AM5728_GCC_Class_Variables.out、远程目标
    终止远程调试。 

    4.第二次启动 GDB,这次运行到 main 上的断点:

    C:\users\MR_半 字\E2E_Example_Projects\AM5728_GCC_class_variables>c:\ti\ccs740\ccsv7\tools\compiler\gcc-arm-no-eabi-6-2017-Q1-updates\binarm-none-eabi-gdb.exe --command=gdb etConfigs\gdb IT Debug2017\AM5728_gun-example-g215-gv-gv1.gebu
    
    for GNU compilit-g4.2017-gv-gv-g215-gv-gv-g4.g4.gv1.gv1.gv1.gv1.gv1.gv1.gv1.g4.
    许可证 GPLv3+:GNU GPL 版本3或更高版本<gnu.org/.../gpl.html>
    这是免费软件:您可以随意更改并重新分发。
    在法律允许的范围内、不提供任何保证。 键入"show copying"
    和"show warranty"了解详细信息。
    此 GDB 配置为"--host=i686-w64-mingw32 --target=arm-none-eabi"。
    键入"show configuration"了解配置详情。
    有关错误报告说明、请参阅:
    <www.gnu.org/.../>。
    有关 GDB 手册和其他在线文档资源的信息,请访问
    :<www.gnu.org/.../>。
    如需帮助、请键入"帮助"。
    键入"apropos word"以搜索与"worp"...相关的命令。
    从 Debug\AM5728_gcc_class_variables.out...完成。
    0x0000000c in? ()
    CPU 已暂停
    $1 = 0x500001da
    $2 = 0x500001d3
    正在加载段.rslice、大小0x70 lma 0x40300000
    正在加载段.text、大小0x11918 lma 0x40300070
    正在加载段.arm.extab、大小0x120 lma 0x4031cc 正在
    加载段.arm.exidx、大小0x1cr 0x4068 lma
    0x408正在
    加载段、大小0x403lma 0x408l 大小0x4 lma 0x40312634
    起始地址0x40300050、负载大小75320
    传输速率:1387KB/秒、918字节/写入。
    0x403001bc 处的断点1:文件./66AK2H14_gcc_class_variables.cpp、行13。
    
    位于./66AK2H14_GCC_CLASS_variables.cpp:13的断点1、main ()
    int main (void){
    (gdb) 

    5.现在可以在 GDB 中单步执行 C++程序,并可以显示 CCS 7.4调试器无法执行以下操作的类变量:

    (gdb)步骤
    14 if (m_pMaster = NULL)
    (gdb)步骤
    16 m_pMaster = new masterclass ();//将其分配到堆区域
    (gdb)步
    进 masterclass:::masterclass (this=0x403130e0)(位于../master_class.cpp:11
    ) 母类:::母类()
    (gdb)步骤
    在./child_class.cpp:10处的 ChildClass::::ChildClass (此= 0x403130e8)
    ChildClass::ChildClass ()
    (gdb)打印*此
    $3 ={_vptr。ChildClass = 0x40310380 ,value0 = 0,value1 = 9}
    (gdb)步骤
    13}
    (gdb)步进
    主类::./master_class.cpp:14
    }处的 masterclass (this = 0x403130e0)
    (gdb) step
    main ()、位于./66AK2H14_gcc_class_variables.cpp:19
    m_pMaster->masterValue = 5;
    (gdb)步骤
    20 m_pMasterPlat.masterValue = 10;
    (gdb)第
    23步}
    (gdb) print *m_pMaster
    $4 ={_vptr。masterclass = 0x403103a8 、masterValue = 5、m_child ={
    _vptr。ChildClass = 0x40310380 、value0 = 0、value1 = 9}}}
    (gdb)打印 m_pMasterPlat
    $5 ={_vptr。masterclass = 0x403103a8 、masterValue = 10、m_child ={
    _vptr。ChildClass = 0x40310380 ,value0 = 0,value1 = 0}}
    (gdb) 

    请注意、虽然成功调试了在片上 RAM 中运行的这个简单示例、但如果加载程序时 gdb_agent_console 会报告以下错误、则不确定调试对于更复杂的程序会有多稳定:

    cortexa15_0 客户端已连接...连接到目标
    未知设备 ID:0x75805400 (1d6、15、0、0)
    未知设备 ID:0x0 (0、0、0)
    cortexa15_0 -处理器类型=未知(小端字节序)
    cortexa15_0 -目标设备使用
    CTOOLS 硬件断点支持进行连接。
    目标已连接...正在启动服务器
    失败! GTI_READEMEMEMEMEMEM_BLK (hpid=00800348、addr=403012d0、count=2)=ffFFFF
    (错误-1205 @ 0x403012D0)
    设备内存总线有错误、可能挂起。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。
    (仿真包7.0.100.0)
    
    失败! GTI_READEMEMEMEMEMEM_BLK (hpid=00800348、addr=40308190、count=2)=ffFFFF
    (错误-1205 @ 0x40308190)
    设备内存总线有错误并可能挂起。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。
    (仿真包7.0.100.0)
    
    失败! GTI_READEMEMEMEMEMEM_BLK (hpid=00800348、addr=4031035c、count=4)=ffFFFF
    (错误-1205 @ 0x4031035C)
    设备内存总线有错误并可能挂起。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。
    (仿真包7.0.100.0) 

    Thread CCS/DRA71XEVM:用于 dra71x EVM 的 xds100v3 gdb 代理注意到、OpenOCD 支持更有效、OpenOCD 支持 XDS100探针。 但是、截至 openocd-0.10.0、没有支持 AM572x 芯片的脚本、因此您必须创建自己的脚本。

    e2e.ti.com/.../AM5728_5F00_GCC_5F00_class_5F00_variables.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、您好!
    非常感谢您的参与。
    您无需使用 XDS100或 xds200。 只需创建目标配置并点击"test"、JTAG 测试将失败、但您会得到我可以检查的目标文件。

    我一直关注 openocd -这是我对 ARM 的第一选择。 遗憾的是、它不支持(目前) am572x。
    我错过了 CCS 中的 GDB 控制台。

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

    [引用 user="Rastation ***">您无需使用 XDS100或 xds200。 只需创建目标配置并单击"test"、JTAG 测试将失败、但您会获得可供我检查的目标文件。确定、目标文件已附加。  e2e.ti.com/.../testBoard_5F00_xds100v2.zip

    我刚才检查了 gdb_agent_console 是否接受了目标文件:

    CCS 7.4 gdb_agent_console 接受 了 testBoard_xds200.dat 文件。

    但是、即使 使用了完整路径、CCS 7.4 gdb_agent_console 也会拒绝 testBoard_xds100v2.dat 文件:

    C:\users\MR_半 字\E2E_Example_Projects\AM5728_GCC_class_variables>c:\ti\ccs740\ccsv7\ccs_base\common\uscif\gdb_agent_console.exe c:\users\MR_半 字\E2E_Example_projects\AM5728_GCC_class_variables\targetConfigs\gb 未
    在 testBoard_xds100v2.dat 配置文件中定义支持的 CPU 

    而当恢复到 CCS 6.2 gdb_agent_console 时、文件被接受:

    C:\users\MR_halfword\E2E_example_projects\AM5728_gcc_class_variables>c:\ti\ccs620\ccsv6\ccs_base\common\uscif\gdb_agent_console.exe c:\users\MR_halfword\E2E_example_projects\AM5728_gcc_class_variables\ctargetConfigs\target\target\\con_target\s\cm\s\con_target\s\con_projects\con_target\s\con_target\s\con_projects\con_target\s\con_target\s\con_target\s\c testBoard_xds100v2.dat testBoard_xds100v2.dat
    
    端口
    --- ---
    cortex_m4_ipu1_c0 :55002
    cortex_m4_ipu1_c1 :55003
    cortex_m4_ipu2_c0 :55004
    cortex_m4_ipu2_c1 :55005
    cortexa15_0 :55006
    cortexa15_1 :55007
    
    启动所有内核
    CPU 名称 现状
    ---- ----
    Cortex_M4_ipu2_c0等待客户端
    cortex_M4_ipu1_C1等待客户端
    cortex_M4_ipu1_c0等待客户端
    cortex_M4_ipu2_C1等待客户端
    cortexa15_1 正在等待客户端
    cortexa15_0 正在等待客户端 

    这是上面 引用的线程 CCS/DRA71XEVM 中报告的错误 DBGTRC-3927:用于 dra71x EVM 的 xds100v3 gdb 代理、其中:

    [引用]当与 XDS100和 XDS110类调试探针配合使用时、XDS GDB 代理无法正确识别多核器件。[/引用]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、您好!
    e2e.ti.com/.../AM5728_5F00_GCC_5F00_class_5F00_variables.zip 上的 XDS200配置文件和 gdlbinit

    目标远程 localhost:55006
    监控器停止
    设置为 ARM 模式
    P/x $CPSR
    设置$CPSR =$CPSR &~0x20
    #设置为专用模式
    设置$CPSR =($CPSR &~0x1F)| 0x13
    P/x $CPSR
    负载
    b 主函数
    继续


    成功了。
    我在 Eclipse 设置方面仍然有一些问题。 我稍后将对此进行处理。

    非常感谢。