0

我正在尝试编写一个循环的 gdb 函数,直到传递的参数等于程序计数器。

我正在使用原始 CPU 68332。没有硬件断点。没有支持 GDB 软件断点的操作系统,只有一个指令步骤。GDB 提供了“next count”的“软件”仿真。JTAG 提供运行寻址。

但是,由于某种原因,JTAG 在用于运行寻址时会压倒 CPU,并且出现总线错误。我似乎只能可靠地使用“步骤”单指令。

如果我使用 GDB 'step' 到该地址,我不会收到总线错误。

下面是我对这种 GDB 功能的尝试。

define mtia
    if $argc == 1 then
    set $address = *(unsigned char*)$arg0
    while($address != $pc)
      nexti
    end
end

我似乎无法获得正确的语法才能让 GDB 接受并运行该函数。

什么是正确的语法?

4

1 回答 1

1

上面 GDB 命令函数的正确语法是

define mtia
    if $argc == 1 then
    set $address = (unsigned char*)$arg0
    while($address != $pc)
      nexti
    end
end

我在 (unsigned char*) 前面有一个星号。这删除了指针类型。这导致 $address != $pc 出现语法错误,因为 $pc 被视为指针。

此函数执行单个汇编指令步骤,直到到达传递给函数的地址。慢,但在旧的 M68332 CPU 上,这就是我所拥有的。

于 2013-07-18T18:35:31.680 回答