1

我正在使用 GDB 和 JTAG 设备 Abatron BDI2000 来调试在摩托罗拉 M68332 上运行的程序。

68332 没有任何硬件断点寄存器。它具有非常原始的调试功能。构建工具不会生成“elf”文件,因此没有可供 GDB 使用的符号。我正在调试的程序也在 Flash 中运行。

实际上 68332 只有一条调试指令 ti。ti 自己跳到下一条汇编指令。ti xxx 步骤直到到达地址 xxx。[是的,这是穴居人时代,冷锤和凿子:)]

我可以使用带有目标遥控器的 GDB 连接到 BDI2000 并发出 GDB 命令“nexti”。由于 68332 的限制,'stepi' 等价于 'nexti'。

单步是唯一可用的命令。

监控命令“monitor ti”状态将程序计数器更改为步进。

如果使用更改寄存器的“监视器”命令,则 GDB 不知道该命令,并且其寄存器缓存变得不同步。我创建了 GDB 函数,每个函数的末尾都有 GDB 命令“flushregs”。这标志着寄存器缓存变脏。GDB 命令将获取一组新的寄存器。

我想创建一个符号表文件进行调试,但没有找到任何关于 GDB 符号文件格式的文档。

我的设置有其他选择吗?我确实有 Flash 区域的 RAM 覆盖。这会允许软件断点吗?

提前感谢您的任何建议。

4

1 回答 1

0

我发现我可以使用“便利”变量来代替符号,因为我不会一次在程序中使用任何符号。

set $Symbol=(unsigned int*)<address>

每个“符号”都被声明为指向地址处的无符号整数的指针。可以将这些语句放在 .gdbinit 中,并随着时间的推移添加到它们中。

然后可以说

break $Symbol

我展示了一个 GDB 命令函数,可以在下面链接的问题中传递这些“方便”变量之一。

如何编写 GDB 函数来与程序计数器进行比较

于 2013-07-19T21:04:37.053 回答