主题中讨论的其他器件:SEGGER、 BeagleBoard-X15、 DRA71XEVM
工具/软件:Code Composer Studio
你(们)好
我想在 XDS100v2或 XDS200上使用本机 ARM GDB (与 GNU 编译器捆绑在一起)。 类似于 Segger GDB 服务器或 OpenOCD。
动机:常用 CCS 调试器并不总是显示 C++类的成员。
我想改用与 GNU 工具捆绑的 gdb。
谢谢
成形术
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.
工具/软件: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++类的成员。
[引用 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 配合使用。
[引用 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
[引用 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 代理无法正确识别多核器件。[/引用]