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

时间:2013-07-16 03:36:45

标签: gdb 68000 jtag

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

我正在使用原始CPU,68332。没有硬件断点。没有支持GDB软件断点的操作系统,只需一个指令步骤。 GDB提供'nexti count'的'软件'仿真。 JTAG提供了一个运行来解决。

然而,由于某种原因,JTAG在用于运行寻址时会压倒CPU,并且我得到总线错误。我似乎只能可靠地使用'step'单指令。

如果我使用GDB“步进”地址,我不会收到总线错误。

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

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

我似乎无法使语法正确,以便能够让GDB接受并运行该函数。

正确的语法是什么?

1 个答案:

答案 0 :(得分: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上,这就是我的全部。